似乎有很多方法可以解决这个问题。
目前我使用如下形式制作部分视图:
<div id="container">
<form id="some-form">
<input id="some-text" type="text">
<input id="some-submit" type="submit">
</form>
</div>
然后我用JQuery劫持提交并做一个ajax帖子并用另一个局部视图替换表单:
$(function()
{
$('#some-form').submit(function(){
$.ajax({
type: "POST",
url: "/Controller/Action",
data: {someVal: $('#some-text').val()},
dataType: "html",
success: function (result) {
$('#container').html(result);
},
error: function (request, status, error) {
alert('Oh no!');
}
});
});
});
控制器就像:
[HttpPost]
public ActionResult SomeAction(string someVal)
{
//Do something with text
return PartialView("SubmitSuccess");
}
有什么其他方法可以完成同样的事情,有什么利弊与我正在做的事情?
Ajax.Form有用吗?
答案 0 :(得分:3)
我个人使用jquery form plugin。它会缩短您的代码。还要将action参数分配给表单,以避免在脚本中对其进行硬编码。
<div id="container">
<% using (Html.BeginForm("action", "controller", FormMethod.Post,
new { id = "some-form" })) { %>
<input id="some-text" type="text">
<input id="some-submit" type="submit">
<% } %>
</div>
然后将插件附加到此表单以进行AJAXify:
$(function() {
$('#some-form').ajaxForm({
success: function(result) {
$('#container').html(result);
},
error: function(request, status, error) {
alert('Oh no!');
}
});
});
插件将使用方法参数中指定的谓词自动向操作发送AJAX请求,并序列化请求中所有输入字段的值。
答案 1 :(得分:0)
你做的方式有什么问题?我已经这样做了,它对我来说很有用。这取决于您需要如何重复使用该过程;你可以使用带有css类的DIV,然后在需要可重用性时创建一个JQuery插件或小部件。
HTH。