Asp.net mvc 3 ASP.net MVC控制器操作-如何防止重定向
我的行动有以下几点Asp.net mvc 3 ASP.net MVC控制器操作-如何防止重定向,asp.net-mvc-3,jquery,Asp.net Mvc 3,Jquery,我的行动有以下几点 [AjaxException] public ActionResult DoSomething(sring someParam1, string someParam2) { //do whatever you need to do here, db etc return new EmptyResult(); } 在我的html中 <form id="search-frm" name="search-frm" action="@Url.Action(
[AjaxException]
public ActionResult DoSomething(sring someParam1, string someParam2) {
//do whatever you need to do here, db etc
return new EmptyResult();
}
在我的html中
<form id="search-frm" name="search-frm" action="@Url.Action("DoSomething", "MyActions")" method="post" >
<input type="button" id="search-btn" value="search" class="btn" onclick="DoSomething();return false;" />
<input type="text" name="param1" id="param1" />
<input type="text" name="param2" id="param2" />
</form>
当我点击按钮,在控制器操作DoSomething
完成后,我会被重定向到MyActions/DoSomething
。有没有办法不使用jquery$.ajax
?我只需要做一些事情,而不是离开现有的页面
谢谢你。因为你的代码很简单。当您单击按钮时,您正在调用
DoSomething
javascript函数并在其中提交表单。因此,它与普通表单提交相同(单击提交按钮提交)。这就是它重定向(实际上被发布到DoSomething
action)的原因
如果您不想离开当前页面,您可以使用ajax
进行发布,获得结果并停留在同一页面中
1)从HTML标记中去掉OnClick事件绑定
2)添加处理表单提交的javascript
$(function(){
$("#search-frm").submit(e){
e.preventDefault(); // prevent the default form posting. Let's stay here
$.post("@Url.Action("DoSomething","MyActions")",$("#search-frm").serialize(), function(data){
//do something with the response data
});
});
});
不确定为什么从操作方法返回EmptyResult
。您可能需要返回一些有效的响应,以指示您尝试执行的操作的状态
[HttpPost]
public ActionResult DoSomething(string param1,string param2)
{
//do something
return Json(new
{ Status= true,
Message="Succesfully saved"
});
}
您可以保留一个通用的ViewModel
来返回这样的结果并使用它,而不是像上面那样动态键入
public class OperationStatus
{
public bool Status { set;get;}
public string Message { set;get;}
}
在你的行动方法中
[HttpPost]
public ActionResult DoSomething(string param1,string param2)
{
//do something
var res=new OperationStatus();
res.Status=true;
res.Message="Successfully Added";
return Json(res);
}
因为你的代码是这样的。当您单击按钮时,您正在调用
DoSomething
javascript函数并在其中提交表单。因此,它与普通表单提交相同(单击提交按钮提交)。这就是它重定向(实际上被发布到DoSomething
action)的原因
如果您不想离开当前页面,您可以使用ajax
进行发布,获得结果并停留在同一页面中
1)从HTML标记中去掉OnClick事件绑定
2)添加处理表单提交的javascript
$(function(){
$("#search-frm").submit(e){
e.preventDefault(); // prevent the default form posting. Let's stay here
$.post("@Url.Action("DoSomething","MyActions")",$("#search-frm").serialize(), function(data){
//do something with the response data
});
});
});
不确定为什么从操作方法返回EmptyResult
。您可能需要返回一些有效的响应,以指示您尝试执行的操作的状态
[HttpPost]
public ActionResult DoSomething(string param1,string param2)
{
//do something
return Json(new
{ Status= true,
Message="Succesfully saved"
});
}
您可以保留一个通用的ViewModel
来返回这样的结果并使用它,而不是像上面那样动态键入
public class OperationStatus
{
public bool Status { set;get;}
public string Message { set;get;}
}
在你的行动方法中
[HttpPost]
public ActionResult DoSomething(string param1,string param2)
{
//do something
var res=new OperationStatus();
res.Status=true;
res.Message="Successfully Added";
return Json(res);
}
为什么不使用AJAX呢?这似乎是实现您想要实现的目标的完美工具:提交表单并保持在同一页面上。我怀疑你的问题遗漏了一些重要的细节。所以请提供它们。现在我来解释一下你的问题:
如何在没有相机的情况下观看和拍照?
。无意义。这就是为什么你要发布无意义的复制品?无意义的复制品没有包含足够的详细信息以便负责。你说一个普通的控制器动作调用需要403ms,而对同一动作的AJAX调用需要3400ms,这非常有趣,因为AJAX调用就像一个普通的动作调用。我想你的量度有点偏差。这个问题还是原来的问题?您需要什么细节?为什么不使用AJAX?这似乎是实现您想要实现的目标的完美工具:提交表单并保持在同一页面上。我怀疑你的问题遗漏了一些重要的细节。所以请提供它们。现在我来解释一下你的问题:如何在没有相机的情况下观看和拍照?
。无意义。这就是为什么你要发布无意义的复制品?无意义的复制品没有包含足够的详细信息以便负责。你说一个普通的控制器动作调用需要403ms,而对同一动作的AJAX调用需要3400ms,这非常有趣,因为AJAX调用就像一个普通的动作调用。我想你的量度有点偏差。这个问题还是原来的问题?您需要什么详细信息?完全不使用$.ajax如何?$.post是$.ajax的一种简短形式,操作方法类型为post。我认为这就足够了。您也可以使用它。如何评估客户端上的JSON响应?请以您收到的JSON格式将其作为单独的问题发布。完全不使用$.ajax如何?$.post是$.ajax的缩写形式,操作方法类型为post。我认为这就足够了。您也可以使用它。如何评估客户端上的JSON响应?请将其作为单独的问题与您收到的JSON格式一起发布