我的页面上有四种不同的表单,每种都是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();
}
答案 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"} );
}