我想将Id的值-从Upsert(Id)发送到渲染的View,我很挣扎。在我之前的问题中,有一种类似的方法正在起作用,而这种方法却没有。我认为我在Model中做错了什么,但我不知道该做什么。我在哪里犯错?这是我的控制器方法:
[HttpGet]
public ActionResult Upsert(int Id)
{
return View();
}
[HttpPost]
public ActionResult Upsert(UpsertViewModel upsertModel)
{
if (!ModelState.IsValid)
{
return View("Upsert", upsertModel);
}
if (!upsertModel.Address.Address_Id.HasValue ||upsertModel.Address.Address_Id == 0)
{
_addressService.insertAddress(upsertModel.Address);
}
else
{
_addressService.updateAddress(upsertModel.Address);
}
return RedirectToAction("Index");
}
这是我的模型:
namespace Clients.Models
{
public class UpsertViewModel
{
public UpsertViewModel(AddressModel address)
{
Address = new AddressModel();
Address.Id = address.Id;
Address.Address_Id = address.Address_Id;
Address.AddressLine_1 = address.AddressLine_1;
Address.AddressLine_2 = address.AddressLine_2;
Address.Postcode = address.Postcode;
Address.Town = address.Town;
Address.DateMovedIn = address.DateMovedIn;
}
public AddressModel Address { get; set; }
}
}
风景:
@model Clients.Models.UpsertViewModel
@using (Html.BeginForm(FormMethod.Post))
{
@Html.ValidationSummary()
@Html.HiddenFor(m=>m.Address.Id)<br/>
@Html.HiddenFor(m => m.Address.Address_Id)<br />
@Html.LabelFor(m => m.Address.AddressLine_1) @Html.TextBoxFor(m => m.Address.AddressLine_1)
@Html.ValidationMessageFor(m => m.Address.AddressLine_1)<br />
@Html.LabelFor(m => m.Address.AddressLine_2) @Html.TextBoxFor(m => m.Address.AddressLine_2)
@Html.ValidationMessageFor(m => m.Address.AddressLine_2)<br />
@Html.LabelFor(m => m.Address.Postcode) @Html.TextBoxFor(m => m.Address.Postcode)
@Html.ValidationMessageFor(m => m.Address.Postcode)<br />
@Html.LabelFor(m => m.Address.Town) @Html.TextBoxFor(m => m.Address.Town)
@Html.ValidationMessageFor(m => m.Address.Town)<br />
@Html.LabelFor(m => m.Address.DateMovedIn) @Html.TextBoxFor(m => m.Address.DateMovedIn)
@Html.ValidationMessageFor(m => m.Address.DateMovedIn)<br />
<input type="submit" value="OK"/>
}
除了您要为大规模分配漏洞打开应用程序外,
您可以尝试执行以下操作:(这是一个猜测(未安装VS进行测试),请耐心等待)
为添加默认构造函数,UpsertViewModel
然后重试。
从您之前的问题和上面提到的代码片段中,Id字段将传递到您的“ GET”方法中,因为UpsertViewModel在先前的问题中具有Id属性,但是现在将其包装在UpsertViewModel.Address中。模型活页夹正在通过反射发挥其魔力
通过@StephenMuecke
为了扩展@Aniket的注释,您的GET方法具有一个名为Id的参数,因此它将其值添加到路由值中(请参阅您<form>
元素的action属性)。当您的模型还具有参数名称Id时,在您提交表单时,该值将绑定到您的模型,因为DefaultModelBinder会从表单参数中读取路线参数(和查询字符串值)中的值。在这种情况下,您的模型没有名为Id的属性(只有一个名为Address.Id的属性)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句