0

即使我从列表中选择了一个项目,我的 MVC 2 下拉验证总是会触发。我从萤火虫中检查了下拉列表是否与预期值正确绑定。

模型:

public class Delivery
{
    public int DeliveryID { get; set; }

   [Required(ErrorMessage = "Please Select a Stock")]
    public int? StockID { get; set; }


     [Required(ErrorMessage = "Please Enter Expenses")]
    public double OtherExpenses { get; set; }

    public double Total { get; set; }

        [Required(ErrorMessage = "Please Enter Description")]
    public string Description { get; set; }

        [Required(ErrorMessage = "Please Enter Arrived Date")]
    public DateTime ArrivedDate { get; set; }

    public string StockDescription { get; set; }

    public IEnumerable<Stock> lstStock { get; set; }
}

控制器:

public ActionResult Create()
        {
            DeliveryRepository rep = new DeliveryRepository();
            var model = new Delivery
            {
                lstStock = rep.GetStock()
            };
            return View(model);
        } 

        //
        // POST: /Delivery/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {

                    Delivery del = new Delivery();
                    DeliveryRepository rep = new DeliveryRepository();
                    TryUpdateModel(del);
                    if (ModelState.IsValid)
                    {// TODO: Add insert logic here

                        del.ArrivedDate = Convert.ToDateTime(Request.Form["ArrivedDate"]);
                        del.Description = Request.Form["Description"];
                        del.OtherExpenses = Convert.ToDouble(Request.Form["OtherExpenses"]);
                        del.StockID = Convert.ToInt32(Request.Form["StockID"]);
                        del.Total = Convert.ToDouble(Request.Form["lblTotal"]) + del.OtherExpenses;
                        rep.Create(del);
                        rep.Save();
                        return RedirectToAction("Index");
                    }
                    else
                    {
                        var model = new Delivery
                        {
                            lstStock = rep.GetStock()
                        };
                        return View(model);
                    }
            }
            catch
            {
                return View();
            }
        }

看法:

 <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        <fieldset>
            <legend>Fields</legend>

             <div class="editor-label">
                <%: Html.Label("Select Stock") %>
            </div>
            <div class="editor-field">
               <%: Html.DropDownListFor(x => x.lstStock, new SelectList(Model.lstStock, "StockID", "Description"), "-- Please Select a Stock --")%>
                 <%: Html.ValidationMessageFor(model => model.StockID)%>
            </div>

            <div id="clslbl">
            <br />
                <label id="lblTotal"></label>

            </div>
           <br />
            <div class="editor-label">
                <%: Html.LabelFor(model => model.OtherExpenses) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.OtherExpenses) %>
                <%: Html.ValidationMessageFor(model => model.OtherExpenses) %>
            </div>


            <div class="editor-label">
                <%: Html.LabelFor(model => model.Description) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Description) %>
                <%: Html.ValidationMessageFor(model => model.Description) %>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.ArrivedDate) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.ArrivedDate) %>
                <%: Html.ValidationMessageFor(model => model.ArrivedDate) %>
            </div>

            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>
4

1 回答 1

0

问题出在我的观点上

 <div class="editor-field">
               <%: Html.DropDownListFor(x => x.lstStock, new SelectList(Model.lstStock, "StockID", "Description"), "-- Please Select a Stock --")%>
                 <%: Html.ValidationMessageFor(model => model.StockID)%>
            </div>

应改为

 <div class="editor-field">
               <%: Html.DropDownListFor(x => x.StockID, new SelectList(Model.lstStock, "StockID", "Description"), "-- Please Select a Stock --")%>
                 <%: Html.ValidationMessageFor(model => model.StockID)%>
            </div>
于 2013-05-08T02:51:50.193 回答