3

私のページには 4 つの異なるフォームがあり、それぞれが ajax フォームです。

ajax を使用して最初のフォームのポスト リクエストを MVC コントローラーに送信しています。基本的に ViewData["TEST"] が返されます。

ビューで ViewData を使用したいのですが、他のフォームを使用するには、これを隠しフィールドに設定する必要があります。

通常の送信を使用せずに到達するにはどうすればよいですか?

これが私のコードです:

@using (Ajax.BeginForm("Index", new AjaxOptions{ HttpMethod = "POST" }))
{
    <script type="text/javascript"> alert('@(ViewData["TEST"])'); </script>
    <input type="text" name="name" />
    <input type="button" onclick="javacript:SubmitAjax();" />
}

<script type="text/javascript">
    function SubmitAjax() {
        $.ajax({
            type: 'POST',
            data: $("#form0").serialize(),
            url: "/Home/Index",
            timeout: 2000,
            async: false,
            success: function (data) {
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(message_Error);
            }
        });
    }

そしてコントローラー;

    [HttpPost]
    public ActionResult Index(string name)
    {
        ViewData["TEST"] = "TESTSTRING";
        return View();
    }
4

1 に答える 1

3

ビューデータがありません!!!! . コンテンツを返すだけです。

[HttpPost]
public ActionResult Index(string name)
{
   return Content("TESTSTRING");
}

successこれを隠しフィールドに設定するには、ajax関数のイベントで行うことができます

success: function (data) {
      $("#hiddenElementID").val(data);
},

また、Path to action メソッドをそのようにハードコーディングしないでください。常に HTML ヘルパー メソッドを使用してください。

交換

url: "/Home/Index"

url: "@Url.Action("Index","Home")"

私は個人的にこの方法を避けたいと思っており、これを処理するためにきれいな手書きのJavaScript コードをAjaxBeginForm書きたいと思っています。

@using(Html.Beginform())
{
  <input type="text" name="name" />
  <input type="submit" id="saveName" value="Save" />
} 

<script type="text/javascript">
 $(function(){
  $("#saveName").click(function(e){
     e.preventDefault();
      $.post("@Url.Action("Index","Home")", 
                        $(this).closest("form").serialize(),
                                                            function(data){
          $("#yourHiddenElementID").val(data);
      });     
  });    
 });    
</script>

編集:コメントのとおり。

複数のアイテムを返したい場合は、JSON を返すことができます

例 2 : 匿名型を JSON に返す

[HttpPost]
public ActionResult Index(string name)
{
   return JSON(new { status : "true", ItemCount=35, UserName="Marc"} );
}

例 1 : ViewModel を JSON に返す

次のようなクラスがあると仮定します

public class Result
{
  public string Status { set;get;}
  public int ItemCount { set;get;}
  public string UserName  { set;get;}
}

これで、このクラスを使用して次のように返すことができますJSON

[HttpPost]
public ActionResult Index(string name)
{
   return JSON(new Result { Status : "true",
                            ItemCount=25, UserName="Scott"} );
}
于 2012-09-13T16:03:15.773 に答える