zoukankan      html  css  js  c++  java
  • 爱上MVC3系列~分部视图中的POST

    回到目录

    在PartialView中进行表单提交,有什么用呢,我来总结一下:

    1 这个表单不只一个地方用到

    2 可能涉及到异步的提交问题

    这两种情况都有可能需要把表单建立在“分部视图”中,我们为第二种情况为例来说一下用法
    首先,我们有一个用户登陆的表单UserLogOn.cshtml,它在首页及产品列表页可能都提供了表现的情况,而这时,我们为了不违背DRY原则,所以会把相同的代码提取出来放到一个partial view中,这就是我们的UserLogOn.cshtml,而它里面只有视图的表现,没有任何提交的动作,因为它可能被提交到不同的Action中去。

    实例选自大家都熟悉的MVC自带的项目

    UserLogOn.cshtml代码如下:

     1 @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
     2 
     3 @using (Html.BeginForm()) {
     4     <div>
     5         <fieldset>
     6             <legend>Account Information</legend>
     7 
     8             <div class="editor-label">
     9                 @Html.LabelFor(m => m.UserName)
    10             </div>
    11             <div class="editor-field">
    12                 @Html.TextBoxFor(m => m.UserName)
    13                 @Html.ValidationMessageFor(m => m.UserName)
    14             </div>
    15 
    16             <div class="editor-label">
    17                 @Html.LabelFor(m => m.Password)
    18             </div>
    19             <div class="editor-field">
    20                 @Html.PasswordFor(m => m.Password)
    21                 @Html.ValidationMessageFor(m => m.Password)
    22             </div>
    23 
    24             <div class="editor-label">
    25                 @Html.CheckBoxFor(m => m.RememberMe)
    26                 @Html.LabelFor(m => m.RememberMe)
    27             </div>
    28 
    29             <p>
    30                 <input type="submit" value="Log On" />
    31             </p>
    32         </fieldset>
    33     </div>
    34 }

    Index.cshtml中去调用它:

    @Html.Partial("UserLogOn")

    在HomeController中的Index方法(Action)中的代码可能是这样:

      
    [HttpPost]
    public ActionResult Index(LogOnModel model) { if (ModelState.IsValid) { if (MembershipService.ValidateUser(model.UserName, model.Password)) { FormsService.SignIn(model.UserName, model.RememberMe); if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } } return View(); }

    OK,事实上,在其他页面有可能也用到了UserLogOn这个视图,但它的POST提交可能是不同的,可能同时要做其它的事件,这时,我们就可以通过@Html.Partial把视力的内容显示出来,而后

    来提交事件在哪一个Action里去写,这样可以很好的实现业务的分离。

    小知识:

    在MVC2.0中,老赵曾经提出过将SCPX分部视力的内容以字符的形式输出,而不是直接到页面的输出流去相应,而在MVC3.0时代,小微把这个功能进行了封装与整合,并提出了两个方法,分别去调用视图和Action:

    @Html.Partial()

    @Html.Action()

    当然,也可以使用MVC2.0的输出流方法:

    @{Html.RenderPartial();}

    @{Html.RenderAction();}

     回到目录

  • 相关阅读:
    给定中序和后序遍历,求前序序列(C++递归方式实现)
    myeclipse2014删除antlr-2.7.2.jar--解决struts和hibernate包冲突
    hadoop1.2.1配置与运行子串统计程序
    任务计划crontab
    建NTP
    vnc下运行runInstall报java错误
    rpm软件安装
    redis
    rpm包和deb包转换
    新老版本centos下载
  • 原文地址:https://www.cnblogs.com/lori/p/2763420.html
Copyright © 2011-2022 走看看