我有一個剃鬚刀視圖,其中將包含5個表單。 (A,B,C,D,E)。每種形式都有自己的ViewModel(AViewModel,BViewModel,CViewModel,DViewModel,EViewModel)。在MVC Razor View上使用單個視圖模型發佈多個表單
我創建了一個父頁面ProductViewModel,該頁面將用作其唯一的ViewModel。在這個ViewModel中將會是頁面上每個表單的所有其他ViewModel(如上所列)。
這裏是什麼ProductViewModel的屬性如下所示:
public AViewModel { get; set; }
public BViewModel { get; set; }
public CViewModel { get; set; }
public DViewModel { get; set; }
public EViewModel { get; set; }
我的Razor視圖如下所示:
@model MVCApp.ViewModels.ProductViewModel
@{
ViewData["Title"] = "Product Detail";
}
<h2>Product Detail</h2>
<form asp-controller="A" asp-action="Save" data-ajax="true" data-ajax-method="POST">
<div class="form-horizontal">
<h4>Form A</h4>
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="AViewModel.Name" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="AViewModel.Name" class="form-control"/>
<span asp-validation-for="AViewModel.Name" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="AViewModel.StartDate" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="AViewModel.StartDate" class="form-control"/>
<span asp-validation-for="AViewModel.StartDate" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="AViewModel.EndDate" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="AViewModel.EndDate" class="form-control"/>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
當點擊保存按鈕我在結束了保存(POST)A控制器的操作方法與我所預期的一樣:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Save(AViewModel viewModel)
{
return Ok();
}
但是,我注意到viewModel param的所有屬性都是空的。
這是否意味着我真的必須將ProductViewModel對象作爲我的ViewModel傳遞給所有這些表單中的所有5個保存操作方法,其中只有ViewModel在作用域中將被填充,其他一切都將爲空?或者,還有更好的方法?
部分視圖正是我所需要的。謝謝! –