如何在mvc 5发布数据中获取部分视图?

时间:2016-11-24 07:52:05

标签: asp.net asp.net-mvc-4

Iam Asp.net Webform Developer并正在尝试学习.net MVC 5。 我知道如何在MVC 5中仅使用静态html标签进行局部视图。

但是我可以在MVC局部视图中使用带有文本框和提交注释的表单吗?

如果是,那么我在哪里为这部分视图写回发函数以获取其发布值,在哪个控制器中?

1 个答案:

答案 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);
    }