【问题标题】:Submit Partial View Data with main form in asp.net MVC在 asp.net MVC 中使用主表单提交部分视图数据
【发布时间】:2014-07-24 12:24:56
【问题描述】:

如何在主视图上提交时在部分视图中提交数据。部分视图没有单独的提交按钮

我正在尝试在一个订单中添加多个产品。每个产品都是部分视图。 用户可以点击“加号”添加多个产品。我希望在提交订单时提交所有产品。 我的地方订单视图是

@model MyApp.Models.Order_Detail
       @section scriptsection {
        <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
        <script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $(".addProduct").live("click", function () {
                    $.get("AddProduct",
                    function (data) {
                        $("#Products").append(data);
                        HideshowMinusButton();
                    });
                });
        </script>
    }
    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Order</legend>

            <div class="editor-label">
                Customer
            </div>
            <div class="editor-field">
                @Html.DropDownListFor(c=>c.Order.CustomerID,(List<SelectListItem>)ViewBag.Customers)
            </div>
            <div>
                <fieldset id="Products">
                    <legend>Products</legend>
                    @Html.Partial("AddProduct")
                </fieldset>
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.Order.OrderDate)
            </div>
            <p>
               <input type="submit" value="Create" />
            </p>
        </fieldset>

在提交按钮上单击如何获得订单中的所有产品?

[HttpPost]
public ActionResult PlaceOrder(Order_detail Ord) //Ord Doesn't Contain Products ??
{
//Add Order to Db
return View("Success");

}

【问题讨论】:

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


    【解决方案1】:

    看看这个页面,我想它会对你有所帮助。

    http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

    您可以将您的操作方法更改为

    public ActionResult PlaceOrder(Order_detail Ord, Products[] products)
    

    或使用http://www.nuget.org/packages/BeginCollectionItem/ 将模型绑定到 Order_detail 模型中。

    【讨论】:

    • 它解释了如何绑定复杂的对象......但是项目的数量是固定的......在我的问题中用户可以添加多个产品......如何做到这一点?......也您已经添加了第二个参数(产品)如何获取该参数中的所有产品
    【解决方案2】:

    您可以在post方法中使用表单集合来获取局部视图中的数据。

    [HttpPost]
    public ActionResult PlaceOrder(Order_detail Ord, FormCollection fc)
    {
      string value = fc.getValue("textBoxName");
    }
    

    只有当控件具有name属性时,您才会在表单集合中获取值。

    例如:

    <input name="users" type="text"/>
    

    然后

    String Value = fc.getvalue("users");
    

    【讨论】:

    • 谢谢..帮助很大...但是如果用户添加多个产品,则会有多个具有相同名称的输入标签....我怎样才能获得这些标签的价值?
    • 那么您应该使用 fc.getvalues("users") 并遍历结果以获取控件的各个值
    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多