2011-04-12 63 views
2

工具:MVC3,jQuery Unobtrusive验证,剃刀,VS 2010MVC3:如何发布包含部分视图的表单?

我正在开发一个MVC2项目,使用户能够请求服务。我已经将所有形式的信息放在了部分视图中,这些视图被强制输入到自己的模型中。每个局部视图都有自己的控制器。部分视图呈现在主容器页面中。我有不引人注意的jQuery数据验证工作的呈现页面上的所有数据。

问题:什么是编码Post的最佳方式,将所有页面数据传递到服务器,以及如何将部分视图关联到它们各自的模型?部分视图的控制器是否可以处理他们自己的数据存储杂事?有什么好的例子吗?或者,这个架构是否有缺陷,我应该重新思考?

由于提前,

阿诺德

回答

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类型语法引入不显眼的验证。只要记住根据默认联工作如何设置你的输入字段的名称属性:

http://www.asp.net/mvc

这对于所有这些基本面的重要来源。

+0

谢谢,Milimetric。我已经完成了一些$ post功能,但我只是在学习。 “successfulFormPost = function()”的用途是什么?它显示警报还是执行重定向?它看起来像savePage收集所有表单元素及其索引,然后$ .post。控制器的行动会重现FormCollection吗?控制器动作是在:f.attr('action')中指定的吗?谢谢! – Arnold 2011-04-12 21:30:17

+0

@Milimetric。哇。我一直在玩这个,当然,我看到我的部分视图被发布到它的[HttpPost] ActionResult。我收到它作为FormCollection,我看到输入的值埋入集合对象中。强大的东西。现在,我必须从集合中挖掘出这些数据。我发现我必须在主容器页面上的表单外放置@ Html.Action(“Create”,“MyPartialView”)。但是当我这样做时,我失去了不显眼的验证,当我的部分视图不包含在表单中并嵌套在主页面上时,验证工作正常。 – Arnold 2011-04-12 21:55:57

+0

@Arnolld,给你的第一个评论:只要你记得它会在每次成功的表单发布后执行,successfulFormPost就可以做你需要的任何事情。 savePage函数实际上只是循环遍历每个表单并单独发布每个表单。控制器动作在你的HTML中用类似

...或者相当于Html.BeginForm类型的调用来指定。 – Milimetric 2011-04-12 22:10:29