MVC2:如何将部分视图中的数据提交给他的控制器?

时间:2011-05-19 02:51:03

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

我有这个型号:

public class Package
{
    public string CustomerName { get; set; }
    public List<Product> Products { get; set; }
    public int Id { get; set; }
}

public class Product
{
    public int Quantity { get; set; }
    public string Name { get; set; }
    public int Id { get; set; }
}

我有一个创建的视图,用于创建新的包和一个或多个创建产品 PartialView

如何在不离开View的情况下将产品信息提交给产品控制器?

这是我的产品的部分视图代码:

<% using (Ajax.BeginForm("Create", "Product", new AjaxOptions())) {%>
    <%: Html.ValidationSummary(true) %>

    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Name) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Name) %>
            <%: Html.ValidationMessageFor(model => model.Name) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Quantity) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Quantity) %>
            <%: Html.ValidationMessageFor(model => model.Quantity) %>
        </div>

<%--    <p>
            <input type="submit" value="Create" />
        </p>--%>
    </fieldset>

<% } %>

谢谢

3 个答案:

答案 0 :(得分:0)

您可以使用AJAX解决问题。代码pode下面将3个值发送到YourAction中的YourController。

jQuery('#YourButton').click(function (event) {

    var jqxhr = $.post("YourController/YourAction", {
        lastName: $("#tbLastName").val(),
        firstName: $("#tbFirstName").val(),
        id: $("#id").val()
    },
    function (data) {
        $('#WhereResultAppear').html(data); //can be deleted
    })

    .success(function () {
        $('#InCaseOfSuccess').html(data); //can be deleted
    })

    .error(function (jqXHR, status, error) {
        $('#InCaseOfError').html(data); //can be deleted
    })

    .complete(function () {
        $('#WhenActionIsComplete').html(data); //can be deleted
    });
});

答案 1 :(得分:0)

在局部视图中为您的表单添加ID。然后使用JQuery通过序列化表单来发送数据。

$.post("controller/action", $("#formId").serialize(),
   function(data) {
     alert("Data Loaded: " + data);
   });

在控制器中

   Package pakage = new Package();

    UpdateModel(pakage );

答案 2 :(得分:0)

虽然您可以像其他答案一样编写代码来序列化数据,但我会考虑围绕

中的字段
@using (Ajax.BeginForm("ActionOnController", new AjaxOptions{}))
{

}

这将为您完成所有操作(只要您包含必要的javascript,例如jquery.unobtrusive-ajax.min.js)

查看AjaxOptions文档。这允许您(在其他事项之外)在发布值之后更新另一部分。您可以使用它来表示成功

马丁