2010-12-17 49 views
1

经过多年的Web Forms开发,我决定给MVC一个去。我已经能够解决大部分其他绊脚石,但我很困难。ASP.Net MVC 3 RC2,部分视图表单处理

在Web窗体中我会为每个窗体创建控件,以便模块化,以便在整个网站中重新使用它们。我试图在MVC中做同样的事情,但部分意见,并没有太多运气。这可能很简单,也许我只是没有搜索正确的关键字集来找到明显的例子。

可以说我为登录表单创建了一个强类型局部视图。我想将其包含在我网站的多个页面上。由于代码与视图是分开的,我如何封装逻辑以便在多个视图中轻松重用?在Web Forms中,我只是把它放在代码隐藏的地方。在MVC中,我必须将代码放在我想要使用该控件的每个视图控制器中吗?

其次,你如何处理部分视图的帖子?我尝试过创建强类型视图和部分视图,但视图模型似乎并不像它们在表单直接在视图上时那样自动填充。我总是可以使用FormCollection作为操作参数,并将值强制到我的部分视图模型中,但这看起来不太优雅。有人可以指点我如何在单个视图上使用多个强类型部分页面的一些功能示例(例如,具有登录控件和注册控件的登录页面)

回答

2

在MVC中,您不应该保留任何逻辑查看(除查看位)。
例如,我建议看看Fabrikam Shipping

要保持您的视图干燥,您可以使用部分和编辑/视图模板。 要提交表单的一部分 - 你可以使用jQuery AJAX(Hijax):

$("#someForm").submit(function() { 
      $.post($(this).attr("action"), $(this).serialize(), 
        function (response) { 
         $("#someContainer").append(response); 
        }); 
      return false; 
     }); 

此外,如果你想提交整个表单到其他动作或控制器,你可以使用这样的事情:

@using (Html.BeginForm("Action","Controller",FormMethod.Post,new{id="Form"})) 
0

将在此文件夹Views\Helpers

@helper LoginControl() { 
    @using (Html.BeginForm("Login","Home")) { 

    } 
} 

而在你的看法使用或主:

<div> 
    @LoginControl() 
</div> 

现在只需添加到您的HomeController

public ActionResult Login(LoginModel model) 
{ 
} 
+0

你确定'Views \ Helpers'工作吗?上次我用ASP.NET MVC团队进行了检查,他们表示,尽管Scott Gu在他的博客中做了广告,但这个功能将不会实现。 – 2010-12-17 09:13:16

+0

ooh。不知道。我刚刚从博客中记起它。 – jgauffin 2010-12-17 09:23:58

+0

我想创建一个Html帮手是要走的路,保持干燥。 – jgauffin 2010-12-17 09:26:22

0

我们没有在MVC3剃刀助手一个非常干净的解决方案。在常规网站中,您可以在App_Code中放置CSHTML或VBHTML文件,然后使用建议的语法jgauffin。不幸的是,由于我们编译系统中的一些限制,我们无法实现他提到的〜/ Views/Helpers模型,我们无法在v1(我们正在调查v2)中克服这些限制。

ASP.Net团队的架构师David Ebbo提出了一个使用Visual Studio代码生成器的解决方案,因此您可以将您的帮助器编译为任何DLL(甚至是常规类库):http://blogs.msdn.com/b/davidebb/archive/2010/10/27/turn-your-razor-helpers-into-reusable-libraries.aspx。我高度建议检查出