MVC POST在ACTION上进行多个模型的数据绑定

首先声明,接下来的东西并不符合本人认同的严谨的MVC模式。

用MVC做项目的过程中,越来越多的用到不严谨的MVC编程。

比如,在"cshtml"文件中写:

@Html.Raw(DBUnitity.helperP.getNav("/main/Index",@ViewBag.token))

做页面验证

在比如,在"cshtml"文件中写:

<div class="s-r">@DBUnitity.helperP.getSJCount("sj", "gz")</div>  做数据获取

当然,这些代码不是我写的,是维护以前同事的代码。他的代码跑的好好的,我们也没去做优化,烂(懒)就烂(懒)下去吧。

今天,要讲的,也是一种不严谨的MVC设计及实现的思路。

我们有这样一个页面,比如需要往后台提交数据并进行处理,验证也好,更新也罢,但是提交的数据涉及到了数据库的多张表。

如果按照之前我喜欢的模式,那么肯定是对页面Model进行封装,比如

 public class ViewModel
    {
        public LoginModel loginModel { set; get; }
        public PersonModel personModel { set; get; }
    }
public class PersonModel
    {
        public string Age { set; get; }
        public string Other { set; get; }
    }
 public class LoginModel
    {
        public string Name { set; get; }
        public string Psd { set; get; }
    }

然后在页面".cshtml"中这样写:

@model  MvcBindDataDemo.ViewModel
@using (Html.BeginForm())
{
    <p>
        账户:@Html.TextBoxFor(p => p.loginModel.Name)</p>
    <p>
        密码:@Html.PasswordFor(p => p.loginModel.Psd)</p>
    <p>
        年龄:@Html.TextBoxFor(p => p.personModel.Age)</p>
    <p>
        其他:@Html.TextBoxFor(p => p.personModel.Other)</p>

    <input type="submit" value="login" />
}

最后在Controller里面进行接收

  [HttpPost]
  public ActionResult Login(ViewModel obj)
  {
      xxx...
      return View();
  }

//=========================================================================

但是呢,或许我们也可以这样写

不定义"ViewModel.cs"

".cshtml"里面

@using (Html.BeginForm())
{
    <p>
        账户:@Html.TextBox("login.name", string.Empty)</p>
    <p>
        密码:@Html.Password("login.psd", string.Empty)</p>
    <p>
        年龄:@Html.TextBox("person.age", string.Empty)</p>
    <p>
        其他:@Html.TextBox("person.other", string.Empty)</p>

    <input type="submit" value="login" />
}

后台Controller:

 [HttpPost]
 public ActionResult Login( [Bind(Prefix = "login")]LoginModel objLogin,[Bind(Prefix="person")]PersonModel objPerson)
 {
      xxx...
      return View();
 }

我们可以将数据直接绑定到“objLogin”与“objPerson”,数据拿到了,想做什么,随便了。

时间: 2024-11-12 21:19:31

MVC POST在ACTION上进行多个模型的数据绑定的相关文章

【MVC】关于Action返回结果类型的事儿(上)

一. ASP.NET MVC 1.0 Result 几何? Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回结果类型: 1. ActionResult(base) 2. ContentResult 3. EmptyResult 4. HttpUnauthorizedResult 5. JavaScriptResult 6. JsonResult 7. FileResult (base) 8. FileContentRes

MVC在页面View上获取当前控制器名称、Action名称以及路由参数

有时候在封装MVC通用控件时需要在页面上获取这些数据. 用以下方法即可: //获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); //获取Action名称: ViewContext.RouteData.Values["action"].ToString(); //获取路由参数值: ViewContext.RouteData.Values[名称].ToString(); //如:ViewCon

MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件02-多文件上传

上一篇中,使用客户端jJSAjaxFileUploader插件实现单文件异步上传,本篇实现多文件异步上传. 本篇源码在github,先看效果: ● 上传文件显示进度条. ● 停止上传按钮和关闭缩略图按钮. ● 限制上传文件的类型. ● 限制上传文件的尺寸. ●同时上传多个文件成功后显示缩略图.文件名: ● 点击界面上的删除按钮,界面删除,同步删除文件夹中文件. ● 再点击上传文件,界面追加一行新的缩略图.文件名.删除按钮: □ HomeController 把上传的文件名改成以GUID命名的格式

通过定制特性灵活判断C# mvc中的action是否需要登录验证

在实现通过定制特性灵活判断mvc中的action是否需要登录验证之前,先简单讲两个知识点: 1.每个action执行前都会先执行OnActionExecuting方法: 2.FCL提供了多种方式来检测特性的存在,比如IsDefined.GetCustomAttributes方法等,IsDefined方法仅仅是判断目标有没有应用指定特性,而GetCustomAttributes方法会构造指定特性的新实例. 一.下面先利用OnActionExecuting和IsDefined这两个方法实现判断act

MVC应用程序实现上传文件

学习MVC以来,一直想实现上传文件的功能,使用jQuery来实现上传,有很多插件.此篇演示中,Insus.NET是使用Uploadify.http://www.uploadify.com/,它有更多的文件说明,可以参考:http://www.uploadify.com/documentation/. 你可以使用MVC的NuGet Packages管理器,来安装这个jQuery的插件: 安装好之后,可以在MVC应用程序的Scripts目录看到它: 在HomeContollers中,创建一个Acti

MVC应用程序显示上传的图片

前两篇<MVC应用程序实现上传文件>http://www.cnblogs.com/insus/p/3590907.html和<MVC应用程序实现上传文件(续)>http://www.cnblogs.com/insus/p/3594834.html,我们练习了上传文件,当然上传图片也是一样. 此篇我们练习,怎样在MVC应用程序中显示用户上传的图片.为了接近更真实的练习,Insus.NET决定对以前的程序修改一下,就是上传的目录把原来的Temp目录改为UploadFiles目录.也就是

Asp.net实现MVC处理文件的上传下载功能实例教程

这篇文章主要介绍了Asp.net实现MVC处理文件的上传下载功能,比较全面而系统的对Asp.net MVC的文件上传下载功能进行了深入分析,有很好的借鉴价值,需要的朋友可以参考下 上传于下载功能是程序设计中非常常见的一个功能,在ASP.NET程序开发中有着非常广泛的应用.本文就以实例形式来实现这一功能. 一.概述 如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUploa

MVC进行多文件上传

用mvc做多文件的上传和保存到本地,大致流程就是,前台通过form表单提交多文件,Controller接受到文件流,将文件流保存到本地 然后将保存地址 存到数据库中. 将文件通过from提交 <form name="form1" method="post" action="地址" id="form1" multiple="multiple" enctype="multipart/form-d

asp.net mvc ajax.beginform()无法上传文件

Asp.Net Mvc使用Ajax.BeginForm上传文件Request.Files始终为null. 使用jquery.form.js插件能解决问题.asp.net mvc ajax.beginform()无法上传文件