3

我的页面上有四种不同的形式,每一种都是 ajax 形式。

我正在向 MVC 控制器发送带有 ajax 的第一个表单的发布请求,它基本上将 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")"

我个人更喜欢避免这种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"} );
}
于 2012-09-13T16:03:15.773 回答