如何在MVC

时间:2017-03-20 19:31:08

标签: ajax asp.net-mvc forms

我有一个表单来更新实体“Item”,它有一个类别的下拉列表。所以它的模型有两个属性:string CategoryName和List AvailableCategories。在我看来,我将组合用户组合框,根据两者的值选择一个类别:

@if (Model != null && Model.AvailableCategories != null)
{
    List<SelectListItem> selectListItem = new List<SelectListItem>();
    foreach (var catName in Model.AvailableCategories)
    {
        selectListItem.Add(new SelectListItem() { Text = catName, Value = catName, Selected = (catName == Model.CategoryName) });
    }
    if (string.IsNullOrEmpty(Model.CategoryName))
    {
        @Html.DropDownList("CategoryName", selectListItem, "Select Category")
    }
    else
    {
        @Html.DropDownList("CategoryName", selectListItem)
    }
}

因此下拉列表已准备就绪,当用户提交时,CategoryName将会更新。但问题是当用户提交表单时,属性List AvailableCategories为null。在我的httppost控制器代码中,如果我需要执行一些服务器端验证:

[HttpPost]
public ActionResult NewItem(NewItemViewModel itemModel, string submit)
{
    if (contact server and find validation failed here)
    {
        ModelState.AddModelError("ItemName", "Server said it's not valid");
        return View(itemModel);
    }
}

现在返回的模型“itemModel”将AvailableCategories设置为null,因为它不在表单中。如果我真的需要在服务器端进行此操作,我需要再次查询数据库以填充此列表,这是无效的。在提交期间,最优雅的方法是将这个帮助器DataStructure组合回来?

我在客户端可以想到的是#1:添加隐藏字段以保存所有字符串以便可以回发,或者#2添加提交功能以将所有数据组合到模型中,然后从脚本发布。然后,如果存在服务器验证错误,我需要逐行将这些错误匹配到正确的验证字段...

0 个答案:

没有答案