MVC2: Как отправить данные из частичного представления на свой контроллер? - PullRequest
0 голосов
/ 19 мая 2011

У меня есть эта модель:

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; }
}

У меня есть Создать представление для создания нового пакета и одного или нескольких Создать продукт 's PartialView .

Как я могу отправить информацию о Продукте на контроллер Продукта, не покидая Вид?

Вот код Partialview моего Продукта:

<% 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 голосов
/ 19 мая 2011

Дайте идентификатор вашей форме в частичном представлении.а затем использовать JQuery для отправки данных путем сериализации формы.

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

И в контроллере

   Package pakage = new Package();

    UpdateModel(pakage );
0 голосов
/ 19 мая 2011

Хотя вы можете написать код для сериализации данных, как упоминалось в других ответах, я бы рассмотрел окружение полей в

@using (Ajax.BeginForm("ActionOnController", new AjaxOptions{}))
{

}

Это все сделает за вас (если вы включите необходимыеjavascript, например, jquery.unobtrusive-ajax.min.js)

Ознакомьтесь с документацией AjaxOptions .Это позволяет (помимо прочего) обновить другой раздел после публикации значений обратно.Вы можете использовать это, чтобы указать успех

Мартин

0 голосов
/ 19 мая 2011

Вы можете использовать AJAX для решения вашей проблемы.Код кода ниже отправляет 3 значения в YourController в YourAction.

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
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...