2010-04-08 5 views
15

내가보기asp.net MVC Ajax.BeginForm

<% using (Ajax.BeginForm("ActionName", null , null, new { id = "FormName" })) 
    {%> 
     <input type="hidden" value = '<%= Html.Encode(Model.id) %>' name="id"/> 
     <textarea id="message" name=message rows="4" style="width: 90%"> 
     </textarea> 
    <% }%} 

이 같은 뭔가를 그리고 작업 방법이

같은 것입니다

Ajax.BeginForm

으로 어려움에 봉착
[AcceptVerbs(HttpVerbs.Post)] 
    [Authorize] 
    public ActionResult ActionName(int id, string message) 
    { 
    .... 
    } 

'id'와 'message'를 동작 메소드에 전달하려고합니다. 나는 routeValues에 대해 'null'을 전달하지만 통과 할 대상은 모른다. 이상 적으로 경로 값을 필요로하지 않지만 actionName과 htmlattributes (양식 이름)을 필요로하는 오버로드를 찾으려고했지만 one.I을 찾을 수 없습니다.보기 모델에 'message'를 추가하고 싶지 않습니다. jquery 작업을위한 FormName. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

아, 나는이 내가

$.post($("#FormName").attr('action'), $("#FormName").serialize(), 
           function(result) { 
            $("#correspondingDiv").html(result); 
           } 
          ); 

답변

29

사용이 오버로드 : http://msdn.microsoft.com/en-us/library/dd470605.aspx

Ajax.BeginForm(
    string "ActionName", 
    string "ControllerName", 
    new routevalues {id="IDValue",message="MyMessage"}, 
    new AjaxOptions {OnBegin=[someFunction], OnFailure=[failureFunction] }, 
    new { id = "FormName" } 
) 
+0

이 솔루션을 시도하면 컨트롤러 동작 메서드가 호출되지만 BeginForm에 정의 된 초기 경로 값을 가지며 폼에 채워지는 초기 값은 여전히 ​​남아 있습니다. 이견있는 사람 ? –

+1

페이지가 렌더링 될 때 BeginForm 도우미가 호출되기 때문에 Ajax.BeginForm을 사용하여 양식의 값을 채울 방법이 없습니다. Request.Form을 사용하여 양식 필드의 값을 가져올 수 있습니다. –

0

시도 형태로 게시하는 방법이다, 얘기를 깜빡 했네요 :

<% using (Ajax.BeginForm("ActionName", null)) 
    {%> 
     <input type="hidden" value = '<%= Html.Encode(Model.id) %>' name="id"/> 
     <textarea id="message" name=message rows="4" style="width: 90%"> 
     </textarea> 
    <% }%} 

난 당신이 생각을 지나치게 복잡하게 얻을 것이다 문제, ID 및 메시지 폼의 필드에서 포스트 백에 채워 지므로 폼 선언에 필드를 지정할 필요가 없습니다. Ajax 응답을 정말로 원하지 않는다면 Html.BeginForm()을 대신 사용해 볼 수도 있습니다.

+1

나는 Ajax 응답을해야합니까 나는 또한 내가 페이지의 여러 형태를 가지고 Ajax.BeginForm에서는 FormName을 언급 할 필요가있다. –