Sal*_*oni 3 c# model-view-controller asp.net-mvc jquery asp.net-mvc-2
我使用ajax post方法发布表单,如: -
$(function(){
Run Code Online (Sandbox Code Playgroud)$('#BtnName').submit(function () { $.ajax({ url: 'Home/Index', type: "POST", data: $(this).serialize(), dataType: "json", async:false, contentType: 'application/json; charset=utf-8', success: function (data) { var message = data.Result; $("#Result").html(message); }, }); return false; }); });
在动作控制器上我回来了
返回Json(new {Result ="Success"},JsonRequestBehavior.AllowGet);
我无法在div中获得结果; 而不是它将整个渲染页面作为完整文件返回.请告诉我我该怎么做才能在页面上显示结果,并希望在不清除表格的同一页面上.
好的,你问题中包含的代码位绝对不足以得出任何结论.让我们做一个完整的例子.
模型:
public class MyViewModel
{
public string Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// TODO : process the model ...
return Json(new { Result = "Success" });
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })) { %>
<%= Html.LabelFor(x => x.Foo) %>
<%= Html.EditorFor(x => x.Foo) %>
<input type="submit" value="Save" />
<% } %>
Run Code Online (Sandbox Code Playgroud)
外部javascript以不引人注目的AJAX化形式:
$(function () {
$('#myForm').submit(function () {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (data) {
var message = data.Result;
$('#Result').html(message);
}
});
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
需要注意的事项:
.submit事件附加到form(#myForm)的if ,而在您的示例中,您使用#BtnName的是表单中看起来奇怪的可疑名称.遗憾的是,您没有显示您的标记,因此我们不知道它实际代表什么Home/Index)的url,而是依赖于Html.BeginForm.这有两个好处:1.你现在可以将你的javascript放到一个单独的文件中=>你不再混合标记和脚本,你的HTML页面现在变得更小,更快加载(外部静态javascript文件被缓存)和2当您在其他服务器上部署应用程序或者您决定更改路由时,它仍然可以在您的js上进行任何修改.contentType: 'application/json'因为当你使用$(this).serialize()它时不会将表单序列化为JSON.它将它序列化为一种 application/x-www-form-urlencoded风格.所以你基本上引入了一个矛盾:你告诉服务器你将发送一个JSON请求,但实际上你没有.async: false属性,因为这会执行同步请求并在执行期间冻结浏览器.它不再是AJAX.所以除非你想要这个,否则不要使用它.dataType: 'json'参数,因为jQuery足够智能,可以从实际的响应Content-Type头中推断出它,并自动解析返回的JSON并将其作为可以直接使用的javascript对象传递给成功回调.| 归档时间: |
|
| 查看次数: |
7606 次 |
| 最近记录: |