在C#MVC 5 Internet应用程序中,我有一个HTTP Get Edit操作结果,它获取一个对象,并将此对象放在ViewModel中,然后在View中显示。
ViewModel中的一个字段是未在视图中编辑的值。在HTTP Post Edit操作中,视图中未编辑的值已重置。
如何保持此值,使其与HTTP Get方法在HTTP Post方法中的值相同?
提前致谢
修改
这是ViewModel代码:
public class MapLocationViewModel
{
[Editable(false)]
public int mapCompanyForeignKeyId { get; set; }
public MapLocation mapLocation { get; set; }
}
以下是HTTP Get Edit Action结果底部的代码,其中设置了mapCompanyForeignKeyId:
MapLocationViewModel mapLocationViewModel = new MapLocationViewModel();
mapLocationViewModel.mapLocation = maplocation;
mapLocationViewModel.mapCompanyForeignKeyId = maplocation.mapCompanyForeignKeyId;
return View(mapLocationViewModel);
以下是HTTP Post Edit Action结果代码:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(MapLocationViewModel mapLocationViewModel)
在上面的HTTP编辑操作结果代码中,将此值设置为HTTP Get Edit Action结果中的数字后,mapLocationViewModel.mapCompanyForeignKeyId将重置为0。
答案 0 :(得分:0)
如果您在表单中使用@Html.TextboxFor(m => m.MyField)
或类似的帮助程序,默认情况下,它应自动吐出每个字段的所有现有值,因此您应该看到所有值是否已修改。发布时,每个包含的字段都将被序列化。如果您使用帮助程序,您将不必担心将命名约定为Razor,并且模型绑定器将为您完成工作。
检查进入POST
操作的请求,看是否是模型绑定问题或客户端问题。如果您没有在正文中看到所需的成员(或查询字符串,如果是GET),那么您不能从客户端发送它们,这可能是由于字段的不正确序列化/命名,不包括字段在页面中,不将字段的值发送到页面,或包括表单之外的字段,以及其他原因......
示例:
public class MyViewModel
{
[Required]
public string Field1 { get; set; }
[Required]
public string Field2 { get; set; }
}
...
@model MyViewModel
@using (Html.BeginForm("MyAction", ...)
{
@Html.LabelFor(m => m.Field1)
@Html.TextboxFor(m => m.Field1)
<br />
@Html.LabelFor(m => m.Field2)
@Html.TextAreaFor(m => m.Field2)
<button type="submit">Submit</button>
}
...
[HttpPost]
public ActionResult MyAction(MyViewModel model)
{
if (!ModelState.IsValid)
return MyGetAction(model);
...
}
答案 1 :(得分:0)
你应该尝试隐藏输入。使用Razor语法,它将是:
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.YourProperty)
}
YourProperty将不可见,但它的值将在发送到POST方法的视图模型中。 您也可以使用HiddenInputAttribute:
[HiddenInput(DisplayValue=false)]
public int YourProperty {get; set;}