2012-04-28 2 views
0

Этот вопрос задан раньше, но ни один из них, который я рассмотрел, не дает ясного или полного решения. Надеюсь, ты поможешь мне здесь.
Я хочу передать данные, введенные с клиента (текстовое поле ввода) на сервер с помощью 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; } 
} 

Ваша помощь будет принята с благодарностью. Спасибо!

+0

Простой способ реализовать это может быть вместо того, чтобы использовать методы AJAX JQuery в , Они дают вам больше контроля, если вам это нужно, и совместимы с вашим текущим кодом. Дайте мне знать, если вы хотите использовать образец кода для этого. –

+0

Возможно, это поможет http://mazharkaunain.blogspot.com/2011/05/aspnet-mvc-razor-render-partial-view.html – maztt

ответ

1

Change Your Действие Ссылка на регулярной кнопки HTML

<button type="button" id="textButton">Add</button> 

Затем с немного JQuery вы сделали

$('#textButton').click(function(){ 
    var recipName = $('.input-search-person').val(); 

    $.post('/Test/AddRecipient', 
      { accountName: recipName}, 
      function(data){ 
       $('#recipientList').append(data); 
      }); 

}); 
+0

Спасибо, Брет! Наконец, ответ был прав! – Cesar

Смежные вопросы