为什么我的字段没有使用EditorFor在Mvc中更新?

时间:2017-08-01 14:07:33

标签: c# asp.net-mvc asp.net-mvc-4

了解为什么我的字段未在Mvc中更新以及如何正确解决此问题的任何帮助?

这是我的控制者:

public class RestaurantController : Controller
{
        static List<RestaurantModel> rr = new List<RestaurantModel>()
        {
            new RestaurantModel() { Id = 1, Name = "Kebabs", Location = "TX" },
            new RestaurantModel() { Id = 2, Name = "Flying Donoughts", Location = "NY" }
        };
        public ActionResult Index()
        {
           var model = from r in rr
                orderby r.Name
                select r;
            return View(model);
        }
        public ActionResult Edit(int id)
        {
            var rev = rr.Single(r => r.Id == id);
            return View(rev);
        }
}

然后,当我访问/ restaurant / index时,我显然可以看到所有餐馆的列表,因为在Index.cshtml中我有:

@model IEnumerable<DCForum.Models.RestaurantModel>

    @foreach (var i in Model)
    {
        @Html.DisplayFor(myitem => i.Name) 
        @Html.DisplayFor(myitem => i.Location)
        @Html.ActionLink("Edit", "Edit", new { id = i.Id })

    }

当我点击编辑链接时,会触发此视图(Edit.cshtml):

@model DCForum.Models.RestaurantModel
            @using(Html.BeginForm()) { 
                 @Html.ValidationSummary(true)

                <fieldset>
                    @Html.HiddenFor(x => x.Id)
                    @Html.EditorFor(x => x.Name)
                    @Html.ValidationMessageFor(x => x.Name)

                    <input type="submit" value="Save" />
                </fieldset>
            }

我点击了保存按钮,但是当我返回索引时,我没有记录为姓名输入的值。我在这里错过了什么?很明显我错过了一些东西。如何进行更新?

PS。以更直接的方式执行此操作是否更值得推荐,可能不使用帮助程序并仅将更新方法与保存按钮相关联? (只是说说)。

2 个答案:

答案 0 :(得分:0)

我忘了添加HttpPost方法。非常感谢你指出这一点。

[HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {

            var review = rr.Single(r => r.Id == id);
            if (TryUpdateModel(review))
            {
                return RedirectToAction("Index");
            }
            return View(review);
       }

答案 1 :(得分:0)

ActionResult操作有HttpGet,但没有任何内容可以接收HttpPost操作。在其上创建一个ActionResult的新HttpPostAttribute,以及一个与模型匹配的参数,如下所示:

[HttpPost]
public ActionResult Edit(Restaurant restaurant)
{
    //Save restaurant here

    return RedirectToAction("Index");
}

ModelBinder会选择此选项,并从提交的表单中为您填充restaurant