如何在ASP MVC中正确更新ViewModel / Model

时间:2017-08-02 15:22:29

标签: c# asp.net asp.net-mvc razor

当我想在我的viewmodel中更新我的某些属性时,我处于这种情况,但如果我在提交时未指定使用null,则我的其他一半属性将获得@Html.hiddenFor形式。

一些明确说明的代码:

public class CountryViewModel(){

  //I have 6 Country properties based on continent
  public string countryEurope1{get; set;}
  public string countryEurope2{get; set;}
  public string countryEurope3{get; set;}

  public string countryAsia1 {get; set;}
  public string countryAsia2 {get; set;}
  public string countryAsia3 {get; set;}
}

然后我想向国家展示,根据这个观点,我有2个动作链接来编辑基于其大陆的国家。

ShowCountry.cshtml

    //View to show all my countries
    @Html.DisplayFor(c => c.countryEurope1)
    @Html.DisplayFor(c => c.countryEurope2)
    @Html.DisplayFor(c => c.countryEurope3)

    @Html.DisplayFor(c => c.countryAsia1 )
    @Html.DisplayFor(c => c.countryAsia2 )
    @Html.DisplayFor(c => c.countryAsia3 )

    //action link going to edit europe country view
    @Html.ActionLink("Edit Europe", "EditEuropeCountry", Model, null);

    //action link going to edit europe country view
    @Html.ActionLink("Edit Asia", "EditAsiaCountry", Model, null);

我的编辑欧洲观点 的 EditEuropeView.cshtml

   @using (Html.BeginForm("submitEurope", "Setting", FormMethod.Post)) {

        //Here I have to use @Html.HiddenFor to preserve value
        @Html.HiddenFor(c => c.countryAsia1)
        @Html.HiddenFor(c => c.countryAsia2)
        @Html.HiddenFor(c => c.countryAsia3)

        @Html.EditorFor(c => c.countryEurope1)
        @Html.EditorFor(c => c.countryEurope2)
        @Html.EditorFor(c => c.countryEurope3)

        <input type="submit" name="Submit" value="Submit" />
    }

正如您在EditEuropeView.cshtml中所看到的,我必须使用countryAsia指定@Html.Hiddenfor个属性,如果我不这样做,则countryAsia值将为null当我提交表格时。而且我认为这种做法非常不合理,想象一下,如果我有100 countryAsia个属性?我必须写@Html.hiddenfor百次吗?

更新一些viewModel属性是否有更高效的技术/实践?

0 个答案:

没有答案