在ViewModel中保留一个值,即使这个值没有被修改



在c# MVC 5 Internet应用程序中,我有一个HTTP Get Edit操作结果,它获得一个对象,并将该对象放置在ViewModel中,然后显示在视图中。

ViewModel中的一个字段是视图中未编辑的值。在HTTP Post Edit操作中,视图中未编辑的值被重置。

我如何保持这个值,使它是相同的值在HTTP Post方法作为HTTP Get方法?

Thanks in advance

编辑

下面是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编辑操作结果代码中,mapLocationViewModel。mapCompanyForeignKeyId重置为0,此值在HTTP Get Edit Action结果中被设置为一个数字。

你应该尝试隐藏输入。使用Razor语法,它将是:

@using (Html.BeginForm())
{         
    @Html.HiddenFor(model => model.YourProperty)
}

YourProperty将不可见,但它的值将在发送给POST方法的视图模型中。你也可以使用HiddenInputAttribute:

[HiddenInput(DisplayValue=false)]
public int YourProperty {get; set;}

如果您在表单中使用@Html.TextboxFor(m => m.MyField)或类似的助手,默认情况下,它应该自动吐出每个字段的所有现有值,因此您应该看到所有值,无论是否修改。当它被发布时,每个包含的字段将被序列化。如果你使用helper,你不必担心命名约定为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);
    ...
}

相关内容

  • 没有找到相关文章

最新更新