Iam Asp.net Webform Developer并正在尝试学习.net MVC 5。 我知道如何在MVC 5中仅使用静态html标签进行局部视图。
但是我可以在MVC局部视图中使用带有文本框和提交注释的表单吗?
如果是,那么我在哪里为这部分视图写回发函数以获取其发布值,在哪个控制器中?
答案 0 :(得分:0)
是的,您也可以在局部视图中使用文本框和提交按钮。
让我们假设你有一个产品应用程序,你的主页面(View)显示所有可用的产品。 所以为了展示你需要传递模型的产品
@model IList<xyzRetailer.ViewModels.ProductViewModel>
@{
ViewData["Title"] = "Home Page";
}
你可以读取如下的值:
<div class="col-md-3">
<h2>Product Categories</h2>
<ul>
@foreach (var item in Model.Select(a=>a.Category).Distinct())
{
<li>@item</li>
}
</ul>
</div>
现在问题如果您想要使用不同视图模型的局部视图,您可以使用元组,或者您可以为部分视图创建一个新对象同时称之为
@Html.Partial("_AddProduct", new yzRetailer.ViewModels.ProductViewModel())
您的部分视图将如下所示:
@model xyzRetailer.ViewModels.ProductViewModel
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
<div class="input-group">
@Html.TextBoxFor(model => model.Id, new { @class = "hidden" })
@Html.TextBoxFor(model => model.Category, new { @class = "form-control" })
</div><input type="submit" value="Save" class="btn btn-primary btn-block" />
}
控制器代码应该转到Home-&gt;创建您在 @ Html.BeginForm 。
中提到的内容public async Task<IActionResult> Create(ProductViewModel product)
{
if (!ModelState.IsValid)
{
return this.BadRequest(ModelState);
}
if (string.IsNullOrEmpty(product.Id))
{
var result = await _catelogueManager.AddAsync(product);
}
else
{
var result = await _catelogueManager.UpdateAsync(product.Id, product);
}
var products = await _catelogueManager.GetAllAsync();
return View("Index", products);
}