簡體   English   中英

如何將數據從嵌套的ViewModel發送到Controller

[英]How to send data from nested ViewModel to Controller

我正在使用嵌套視圖模型來顯示基於用戶角色的視圖。

模型:

public class MainVM {
  //some properties
  public OneVM One {get; set;}
  public TwoVM Two {get; set;}
}

public class OneVM {
   //properties
}

public class TwoVM {
   //properties
}

如此處所述 ,僅主模型需要發送給控制器。 我正在使用Automapper從接收的模型映射屬性。

控制器:

public ActionResult EditAction(MainVM model){
  var item = db.Table.Find(model.Id);
  //automapper to map
  AutoMapper.Mapper.Map(model.One, item); //does not work

  db.Entry(item).State = EntityState.Modified;
  db.SaveChanges();
}

這是正確的方法嗎? 我在這里做錯了。

更新:這是我用來從部分視圖渲染嵌套視圖模型的視圖

視圖:

@model MainVM

@Html.RenderPartial("_OnePartial", Model.One)

這個答案https://stackoverflow.com/a/6292180/342095定義了一個HTML助手,它將生成帶有正確名稱的部分視圖。

屬性One的值將為空,因為您OneVM的實例OneVM給局部模型(不是主模型),因此表單控件沒有正確地使用前綴命名(該前綴必須為name="One.SomeProperty" )。

您已包含指向PartialFor()幫助器的鏈接(有效),但未使用它。 在主視圖中,它需要

@Html.PartialFor(m => m.One, "_OnePartial")

相當於

@Html.Partial("_OnePartial", Model.One, 
    new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "One" }})

問題可能出在您的HTML中。 如果模型是嵌套的,則屬性的輸入字段應如下所示:

<input type="text" name="SubModel.PropertyName" />

使用HTML助手,它看起來像這樣:

@Html.EditorFor(model => model.SubModel.PropertyName)

ASP.NET MVC操作無法知道,如果您的子模型不在HTML中,則要填充它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM