模型
namespace Models
{
public class PartialTestModel
{
public int? NullableProp { get; set; }
}
}
这很好用
<div class="highlight1">
@Html.DropDownListFor(m => m.NullableProp, new SelectList(Enumerable.Range(1, 10), Model.NullableProp), "-- Select one --")
</div>
但是,如果为此属性创建了部分视图
@model System.Int32?
<div class="highlight1">
Model's value is
@if (@Model.HasValue)
{
@Model.ToString()
}
else
{
<text>Null</text>
}
@Html.DropDownListFor(m => m, new SelectList(Enumerable.Range(1, 10), Model), "-- Select one --")
</div>
它会抛出错误
Value cannot be null or empty.
Parameter name: name
[ArgumentException: Value cannot be null or empty.
Parameter name: name]
System.Web.Mvc.Html.SelectExtensions.SelectInternal(HtmlHelper htmlHelper, String optionLabel, String name, IEnumerable`1 selectList, Boolean allowMultiple, IDictionary`2 htmlAttributes) +396232
System.Web.Mvc.Html.SelectExtensions.DropDownListFor(HtmlHelper`1 htmlHelper, Expression`1 expression, IEnumerable`1 selectList, String optionLabel, IDictionary`2 htmlAttributes) +35
System.Web.Mvc.Html.SelectExtensions.DropDownListFor(HtmlHelper`1 htmlHelper, Expression`1 expression, IEnumerable`1 selectList, String optionLabel) +14
视图将部分呈现为
@Html.Partial("_PartialTest", Model.NullableProp, new ViewDataDictionary())
根据{{3}}中的答案添加了 new ViewDataDictionary()
。如果属性值为null,则在部分视图中看不到此错误模型。当属性值不为null时,可以使用
@Html.Partial("_PartialTest", Model.NullableProp)
但仍然会产生与上面粘贴的错误相同的错误。
答案 0 :(得分:1)
问题是.DropDownListFor(m => m, ...
使用lambda表达式来创建输入的名称。但是,m => m
不包含属性,因此没有名称。
如果您改为使用m => m.Value
,它可能会有效,因为这是一个lambda表达式,它实际上可能不会被执行。