Этот вопрос задан раньше, но ни один из них, который я рассмотрел, не дает ясного или полного решения. Надеюсь, ты поможешь мне здесь.
Я хочу передать данные, введенные с клиента (текстовое поле ввода) на сервер с помощью AjaxHelper. Если есть более элегантное решение, ответьте на код, относящийся к моему образцу.
Я также пробовал использовать Ajax.BeginForm() без успеха. Имейте в виду, что здесь есть две кнопки. Один, который динамически добавляет то, что пользователь вводит ниже поля ввода. А вторая кнопка - это просто сообщение не-ajax для контроллера.
Элементы динамически добавляются с использованием Ajax.ActionLink() и частичного представления «_NewRow.cshtml» для определения разметки.ASP.NET MVC: передача данных из представления в контроллер (Ajax vs jQuery)
Вот мой Index.cshtml:
@model MyAccount
@using (Html.BeginForm())
{
@Html.ValidationSummary(excludePropertyErrors: true)
<fieldset>
<div class="form-element cf">
<div class="form-label">
<span>Approvers:</span>
</div>
<div class="form-input cf">
@Html.TextBox("accountName", string.Empty, new { @class = "input-search-person" })
@Ajax.ActionLink("Add", "AddRecipient", "Test",
new
{
accountName = "Value from Input here."
},
new AjaxOptions
{
UpdateTargetId = "recipientList",
HttpMethod = "POST",
InsertionMode = InsertionMode.InsertAfter
})
<div style="display: block; margin-top: 5px">
<div id="recipientList">
</div>
</div>
</div>
</div>
</fieldset>
<input type="submit" class="btn green rounded" id="Submit" name="Submit" value="Submit" />
}
Вот мои TestController.cs:
public class TestController : Controller
{
public PartialViewResult AddRecipient(string accountName)
{
MyAccount acct = new MyAccount();
acct.LastName = accountName;
acct.Email = "some email";
return PartialView("_NewRow", acct);
}
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(IEnumerable<string> accountList, string accountName)
{
if (Request.IsAjaxRequest())
{
MyAccount acct = new MyAccount();
acct.LastName = accountName;
acct.Email = "some email";
return PartialView("_NewRow", accountName);
}
if (ModelState.IsValid)
{
RedirectToAction("AnotherAction", "AnotherController");
}
return View();
}
}
Вот мой Частичный вид "_NewRow.cshtml":
@model MyAccount
@using (Html.BeginCollectionItem("recipients"))
{
@Html.HiddenFor(model => model.LastName)
@Html.HiddenFor(model => model.Email)
<span>@Model.LastName<span>(@Model.Email)</span></span>
}
И вот мой простая модель MyAccount.cs:
[Serializable]
[DataContract]
public class MyAccount
{
[DataMember]
public virtual string LastName { get; set; }
[DataMember]
public virtual string Email { get; set; }
}
Ваша помощь будет принята с благодарностью. Спасибо!
Простой способ реализовать это может быть вместо того, чтобы использовать методы AJAX JQuery в , Они дают вам больше контроля, если вам это нужно, и совместимы с вашим текущим кодом. Дайте мне знать, если вы хотите использовать образец кода для этого. –
Возможно, это поможет http://mazharkaunain.blogspot.com/2011/05/aspnet-mvc-razor-render-partial-view.html – maztt