无法将模型中的类变量绑定到HTML.DROPDOWNLISTFOR<>

时间:2013-12-31 15:49:04

标签: c# asp.net-mvc html.dropdownlistfor

我所拥有的是在模型中声明的业务对象实体类变量,但是当我尝试将类变量的成员绑定到html.dropdownlist时它不起作用:

所以这是我的模特:

public class pc
{
    public pcp  pk{get;set;}
    public int zip{get;set;}
    List<Suf> SufList{get;set;} //**
}

这里pk是业务对象pcp的变量

public class pcp :basec
{
    [Key]
    public int pcid;
}

public class basec
{
    // **public string suf**
}

现在在我看来,我调用将上面的模型绑定到下拉列表:  m是模型,即类pc

@Html.DropDownListFor(m => m.pk.suf, new selectlist(m => m.SufList, 
    "Key", "Value", m.pk.suf)

它提供了例外Object reference not set to an instance of an object 在这下降。

但同时如果我直接在m中声明suf变量并使用如下的绑定:

@Html.DropDownListFor(m => m.suf, new selectlist(m => m.SufList, 
    "Key", "Value", m.suf)

它有效,但这不是您想要的方式。

关于我需要在这里做什么的任何建议,把它设置好吗?

1 个答案:

答案 0 :(得分:0)

此错误表示您的属性pk为空,但您尝试访问其上的属性(suf)。确保您的属性pk具有值(在将模型传递给视图之前在控制器中将其设置在模型上)并且错误应该消失。

呈现视图的控制器操作示例:

public ViewResult YourAction() {
    pcp model = new pcp {
        pk = new pk(),
        SufList = new SufList {
            // Set list items here
        }
        // set other properties as needed
    };
    return View("YourViewName", model);
}

另外,我强烈建议使用更具描述性的类和属性名称(而不是缩写)和一致的命名约定。通常,C#用法是CamelCase类/属性名称,首字母大写。