2012-06-27 5 views
1

Ajax.ActionLink 도우미를 사용하고 컨트롤러 액션에 몇 개의 매개 변수를 전달해야한다면 모델에 바인딩되지 않은 TextArea 값을 어떻게 얻을 수 있습니까?ajax.actionlink 컨트롤러 액션 호출

예를 들어 사용자가 텍스트 영역을 채우고 저장을 클릭하여 추가 처리를 위해 컨트롤러 영역에 텍스트 영역 값을 보냅니다.

ViewBag를 사용합니까? 그렇다면 ViewBag에 DOM 요소의 값을 어떻게 할당합니까?

답변

1

ViewBag는 서버 쪽 개념입니다. 페이지가 렌더링되면 존재하지 않습니다. 페이지의 필드를 액션 매개 변수와 선언적으로 연결하는 방법을 알 수 없습니다.

는 두 가지 옵션이 당신이 원하는 것을 수행합니다 이 - Ajax.ActionLink 도우미 제거를하고, (죄송합니다, Ican't 정말 거기에 당신을 도울 수) 일부 자바 스크립트를 작성 - 사용 대신 Ajax.BeginForm 및 넣어 양식의 관련 필드를 클릭하면 제출 버튼을 클릭하면 양식이 아약스를 통해 다시 제출됩니다.

+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()를 사용하면이 페이지에 모델에 바인딩되지 않은 경우에도 컨트롤러 까지 데이터를 전송할 수 있습니다. Html 요소의 name 속성이 컨트롤러에 필요한 매개 변수와 같은 이름인지 확인해야합니다.

그래서 당신은

public ActionResult SendUp(string Name, string ta) 

의 제어 방법이있는 경우 이름 NameAjax.BeginForm()의 내부 ta와의 HTML 요소가 필요합니다.

당신이 중 하나를 전체 요소 쓰는 수있는이 수행합니다

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

을 아니면 @Html 도우미를 사용할 수 있습니다.

@Html.Editor("Name") 

당신이이 id 속성으로하고 name 속성뿐만 아니라 해당 값을 설정합니다 @Html 도우미의 이름을 제공

.