将ajax帖子的返回数据传输到隐藏状态? ASP.NET MVC

时间:2012-09-13 14:52:25

标签: asp.net-mvc jquery razor http-post

我的页面上有四种不同的表单,每种都是ajax表单。

我将带有ajax的第一个表单的发送请求发送给MVC Controller,它基本上将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();
    }

1 个答案:

答案 0 :(得分:3)

没有ViewData !!!! 。只需返回内容即可。

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

并在隐藏字段中设置它,你可以在你的ajax函数的success事件中这样做

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

也不要像这样硬编码Path to action方法。始终使用HTML帮助程序方法。

替换

url: "/Home/Index"

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

我个人更喜欢避免使用AjaxBeginForm方法,并希望编写一些干净的手写 javascript代码来处理此问题。

@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"} );
}