了解为什么我的字段未在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。以更直接的方式执行此操作是否更值得推荐,可能不使用帮助程序并仅将更新方法与保存按钮相关联? (只是说说)。
答案 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
。