DropDownListFor的验证在MVC3中不起作用?

时间:2012-05-28 06:15:26

标签: asp.net-mvc-3 asp.net-mvc-3-areas

验证正在处理其他输入类型的文本元素,但不能处理DropDownListFor

类购买输入属性代码

[Required]
public string LedgerId { get; set; }

班级视图型号代码

PurchaseViewModel purchaseVM = new PurchaseViewModel
{
    // PurchaseInput=purchaseInput,
    Ledger = uw.LedgerRepository.Get().Select(x => new SelectListItem { Value = x.Id.ToString(), Text = x.LedgerName }),
};

查看                 

<div class="column">
    <div  class="labelField">
        @Html.LabelFor(model => model.PurchaseInput.LedgerId, "Party")
    </div>   
    <div class="ItemField">
        @Html.DropDownListFor(model => model.PurchaseInput.LedgerId, new SelectList(Model.Ledger, "Value", "Text"))
        @Html.ValidationMessageFor(model => model.PurchaseInput.LedgerId)
    </div>
</div>

3 个答案:

答案 0 :(得分:1)

从表面上看,您的选择列表中似乎没有空白项目。仅当用户选择字符串长度为零的下拉项时,才会触发验证。如果您检查Html源代码,您是否可以在下拉列表中看到验证属性(取决于您是否使用不引人注目的验证)?

答案 1 :(得分:0)

是的,DropDownListFor的验证存在问题。看看这个链接。他们从元数据手动获取验证数据 - http://forums.asp.net/t/1649193.aspx

答案 2 :(得分:0)

虽然这是一种解决方法,但至少它会触发某种验证。尝试:

@Html.DropDownListFor(model => model.PurchaseInput.LedgerId, new SelectList(Model.Ledger, "Value", "Text"), new { @class = "required" })