2012-06-27 2 views
1

Если я использую помощник Ajax.ActionLink, и мне нужно передать пару параметров в действие контроллера, как я могу получить значение TextArea, которое не связано с моделью?ajax.actionlink вызов действия контроллера

Например, я хочу, чтобы пользователь заполнил текстовое поле, а затем нажмите «Сохранить», посылая значение textarea в действие контроллера для дальнейшей обработки.

Использовать ViewBag? Если да, как мне присвоить значение элемента DOM ViewBag?

ответ

1

ViewBag - это концепция на стороне сервера. Он не существует, как только страница была отображена. Я не знаю, как я могу декларативно связать поле на странице с параметром действия.

Чтобы сделать то, что вы хотите, у вас есть два варианта: - избавиться от помощника Ajax.ActionLink и написать некоторые Javascript (извините, Ican't действительно помочь вам там) - Используется для Ajax.BeginForm вместо и поставить соответствующие поля в форме, так что щелчок по кнопке отправки отправит форму обратно к вашему действию через ajax.

+0

@ Dennis Troller - спасибо вам за помощь. Вместо этого я буду использовать js. благодаря – Ryan

3

Я уже сталкивался с этой проблемой, и вы можете обойти ее, используя Ajax.BeginForm.

Отнесите следовать примеру:

У меня есть модель Person, что одна строка свойств для имени.

Посмотреть

@model Application.Models.Person 

<fieldset> 
    <legend>Form</legend> 
    @using (Ajax.BeginForm("SendUp", "Home", new AjaxOptions 
    { 
     HttpMethod = "POST", 
     OnComplete = "window.location.href = 'Index'" 
    })) 
    { 
     <p> 
      @Html.LabelFor(model => model.Name) 
      @Html.EditorFor(model => model.Name) 
     </p> 
     <p> 
      @Html.TextArea("ta") 
     </p> 
     <p> 
      <input type="submit" value="Submit" /> 
     </p> 
    } 
</fieldset> 

Контроллер

[HttpPost] 
    public ActionResult SendUp(string Name, string ta) 
    { 
     string s = ta; 
     // Process stuff here 
     // Go to another action or whatever 
     return RedirectToAction("Index"); 
    } 

Использование Ajax.BeginForm() позволяет передавать данные на расстояние до контроллера , даже если он не связан с моделью на странице. Вы должны убедиться, что свойство name вашего элемента Html имеет то же имя, что и параметр, который требуется контроллеру.

Так что если у вас есть метод контроллера в

public ActionResult SendUp(string Name, string ta) 

Вам нужно будет иметь элемент Html из с именем Name и ta внутри от Ajax.BeginForm().

Для этого вы можете либо записать весь элемент:

<input type="text" id="Name" name="Name" /> 

Или вы можете использовать @Html помощников.

@Html.Editor("Name") 

Когда вы предоставите имя помощника @Html будет установить это значение в качестве id собственности и в name собственность.

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