2012-03-13 34 views
1

まず、私の悪い英語のために申し訳ありません。ajax.BeginFormでコンテンツを変更するにはどうすればよいですか?

ボタン "ページ1"をクリックすると、コントローラーは "ページ1"のレンダリング部分と "ページ2"と "すべてのページ"の同じものを返します。

@{ 
ViewBag.Title = "Title"; 
} 
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
<h2>Title</h2> 

@using (Ajax.BeginForm("NameAction", //controller action name 
"NameController", //controller name 
new AjaxOptions //ajax options that tell mvc how to perform the replacement 
{ 
UpdateTargetId = "ViewPage", //id of div to update 
HttpMethod = "Post" //how to call the controller action 
}, new { id = "FormName" })) 
{ 
<input type="submit" id="btn" value="p1" id="p1"/> 
<input type="submit" id="btn" value="p2" id="p2"/> 
<input type="submit" id="btn" value="AllPage" id="AllPage"/> 
<div id="ViewPage"> 
    //render partial view 
</div>   
} 

そして、私のコントローラは、次のとおりです:

私の見解ではあり

public class NameController : Controller 
{ 
    [HttpPost] 
    public ActionResult NameAction(String btn) 
    { 
     if (Request.IsAjaxRequest()) 
     if(btn="p1") 
     return PartialView("p1"); 
     if(btn="2") 
     return PartialView("p2"); 
     if(btn="3") 
     return PartialView("p3"); 


     return View(); 
    } 
} 

Request.isAjaxRequestは常にfalse等しいとpartialviewはdiv要素を更新しますが、すべてのページに用

感謝を消去しませんあなたのお手伝い。

+0

MVC2またはMVC3:

Ajax.BeginFormは、AJAX要求を動作し、送信するように、あなたのページにjquery.unobtrusive-ajaxスクリプトが含まれていることを確認してください?質問のタグを整理してください。 – ThiefMaster

+0

@ThiefMaster、私は 'razor'で使用できない' asp.net-mvc-2'タグを削除しました。 –

+0

タグにご迷惑をおかけして、訂正していただきましたダーリン・ディミトロフに感謝いたします。それは私の "文字列btn"の解決策がnullではないが、ajaxオプションが機能しないためです:(コントローラのisAjaxRequestが常にfalseであるとテストすると、partialviewはすべてのページを消去し、div:sを更新しません – Zoners

答えて

1

あなたの送信ボタンに名前付け:その後、

<input type="submit" name="btn" value="page1" id="Page1"/> 
<input type="submit" name="btn" value="Page2" id="Page2"/> 
<input type="submit" name="btn" value="AllPage" id="AllPage"/> 

と:

[HttpPost] 
public ActionResult NameAction(string btn) 
{ 
    if (btn == "page1") 
    { 
     // the page1 button was clicked 
    } 
    else if (btn == "page2") 
    { 
     // the page2 button was clicked 
    } 
    else if (btn == "AllPage") 
    { 
     // the AllPage button was clicked 
    } 

    ... 
} 

と、ボタンの実際のラベルに依存したくなかった場合:

<button type="submit" name="btn" value="p1" id="Page1">Show page 1</button> 
<button type="submit" name="btn" value="p2" id="Page2">Show page 2</button> 
<button type="submit" name="btn" value="all" id="AllPage">Show all pages</button> 

コントローラでは、値と照合することができます。


UPDATE:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
関連する問題