public Edit(int? id){ /* Codes */ }
[HttpPost]
public Edit(Item model){ /* Codes */ }
我在第一个Edit方法中检索Item的副本,该方法将包含ItemID的值。但是当它到达HttpPost方法时,id值就丢失了。
如果切换到
public Edit(int? ItemID){ /* Codes */ }
[HttpPost]
public Edit(Item model){ /* Codes */ }
这样ItemID可以保存在Item模型中。 但这是处理它的好方法吗? ASP.NET MVC是否总能知道它需要将“ItemID”插入Item? 还有其他方法来保持ID值吗?感谢。
答案 0 :(得分:1)
我无法理解你如何在HttpPost处理中丢失id。也许你应该检查你的活页夹,并可能自己写一个?根据我的经验,默认粘合剂有点麻烦。你可以从 here 开始,虽然我不假装它是最好的解决方案。如果您需要手动编写许多绑定器,请查看一些可以帮助您以声明方式进行转换的工具,如AutoMapper 。
答案 1 :(得分:1)
您是否尝试将ID作为参数添加到Post操作?
public Edit(int? id){ /* Codes */ }
[HttpPost]
public Edit(int id, Item model){ /* Codes */ }
这样,当回发表单时,将从URL填充id。
答案 2 :(得分:1)
Item
模型上的属性是ItemID
吗?如果是这样,那么如果您在名为ID
的字段周围传递,则默认模型绑定器不会填充它。如果您更改方法签名以使参数名称与您的Item
属性名称匹配,则它应该按预期工作。
答案 3 :(得分:0)
Phil Haack有一个帖子可能与你正在做的事情有关,也可能没有。
此外,如果您没有将ID作为表单(隐藏字段或诸如此类的一部分)的一部分发送到客户端,并且它不是POST URL的一部分,那么只有你没有它才有意义在POST上正确填充了ID字段。
答案 4 :(得分:0)
MVC 2解决ID问题的方法是Optional URL Parameters。
如果你还在使用MVC 1,那么在方法参数上使用绑定属性:
[HttpPost]
public ActionResult Edit([Bind(Exclude = "ItemID")] Item model)
{
// ...
}
答案 5 :(得分:0)
回答很少,但是当使用剃刀时,使用隐藏的字段来将Id绑定到模型。
@Html.HiddenFor(model => model.Id)
完整的表单帖子可能如下所示:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Address</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.StreetLine1, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.StreetLine1, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.StreetLine1, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}