[英]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.