工具:MVC3,jQuery Unobtrusive Validation,Razor,VS 2010
我正在开发一个MVC2项目,使用户可以请求服务。我在部分视图中放置了所有表单的共同信息,这些信息是对自己的模型强类型的。每个局部视图都有自己的控制器。部分视图在主容器页面中呈现。我对渲染页面上的所有数据都进行了不显眼的jQuery数据验证。
问题:对将所有页面数据中继到服务器的帖子进行编码的最佳方法是什么?如何将部分视图与各自的模型相关联?部分视图的控制器是否可以处理自己的数据存储杂务?某处有什么好的例子吗?或者,这种架构是否存在缺陷,我应该重新考虑一下?
提前致谢,
阿诺德
答案 0 :(得分:1)
不,完全没有,听起来很好,很容易测试。首先,确保使用HTML中的正确操作,方法等正确设置表单。那么发布整个页面就可以做到这样的事情:
var savePage = function () {
$('form').each(function (formIndex, formElement) {
var f = $(formElement);
$.post(f.attr('action'), f.serialize(), successfulFormPost);
});
};
var successfulFormPost = function (data) { ... };
现在,如果您的MVC视图看起来像这样:
(注意name属性的命名约定)。然后,您可以使该表单的控制器采用与视图的@Model匹配的强类型参数:
public class SomeModel {
public int Id { get; set; }
public string Description { get; set; }
}
public class SomeController : Controller {
[HttpPost]
public ActionResult SomeAction(SomeModel someModel) {
// use someModel.Id, someModel.Description here
}
}
我手动做了一些HTML,但我只是证明了绑定和链接HTML POST与控制器操作的关键点。我将通过使用Html.TextBox类型语法让您接受不引人注目的验证。只需记住根据默认活页夹的工作方式设置输入字段的名称属性:
这是所有这些基本原则的重要来源。