#asp.net #asp.net-mvc #asp.net-mvc-2
#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; }
}
У меня есть представление Create для создания нового пакета и одно или несколько 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>
<% } %>
Спасибо
Комментарии:
1. @SLaks, да, я знаю, но какой вызов выполнить? Как передать данные полей на контроллер?
2. С формой, которую вы получили выше, вам просто нужно раскомментировать кнопку отправки и <script src=»@Url.Content(«~/Scripts/jquery.unobtrusive-ajax.min.js «)» введите=»text / javascript»></script> вверху. Вам вообще не нужно будет писать какой-либо код javascript, если вы это сделаете
3. Эта форма (Product Form) находится в другой форме (Package form), и даже если я использую этот скрипт, вызывается Create of Package, а не Product form. Я думаю, что я должен использовать метод $.post.
Ответ №1:
Вы можете использовать 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
});
});
Комментарии:
1. Да, я буду использовать $.post (). Спасибо
Ответ №2:
Дайте идентификатор вашей форме в частичном представлении. а затем использовать jQuery для отправки данных путем сериализации формы.
$.post("controller/action", $("#formId").serialize(),
function(data) {
alert("Data Loaded: " data);
});
И в контроллере
Package pakage = new Package();
UpdateModel(pakage );
Комментарии:
1. Я загружаю частичное представление с помощью метода load jQuery, и когда я это делаю, частичное представление отображается, но форма частичного представления — нет!
2. Я обновил ответ, чтобы предоставить вам код частичного просмотра
Ответ №3:
Хотя вы можете написать код для сериализации данных, как упоминалось в других ответах, я бы рассмотрел окружение полей в
@using (Ajax.BeginForm("ActionOnController", new AjaxOptions{}))
{
}
Это сделает все это за вас (при условии, что вы включите необходимый javascript, например jquery.unobtrusive-ajax.min.js )
Взгляните на документацию по AjaxOptions. Это позволяет вам (среди прочего) обновить другой раздел после обратной публикации значений. Вы можете использовать это, чтобы указать на успех
Мартин