如何在MVC中将表单与模型数据绑定

时间:2013-09-16 20:40:30

标签: asp.net-mvc-3 model asp.net-mvc-viewmodel

这里我有一个型号。现在我想用html helper构建表单。因此,当调用索引操作时,我想手动填充模型数据并将模型发送到视图。 这是我的模型数据,但由于缺乏知识,我想要构建形式的方式不可能。所以,如果有可能帮助我

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;

namespace MvcPractise.Models
{
    public class Student
    {
        [Required(ErrorMessage = "First Name Required")] // textboxes will show
        [Display(Name = "First Name :")]
        [StringLength(5, ErrorMessage = "First Name cannot be longer than 5 characters.")]
        public string FirstName { get; set; }

        [Required(ErrorMessage = "Last Name Required")] // textboxes will show
        [Display(Name = "Last Name :")]
        [StringLength(5, ErrorMessage = "Last Name cannot be longer than 5 characters.")]
        public string LastName { get; set; }

        [Required(ErrorMessage = "DOB require")] // datepicker will show
        [Display(Name = "DOB :")]
        [DataType(DataType.Date)]
        public DateTime Dob { get; set; }

        [Required(ErrorMessage = "State Required")] // drodown will show
        [Display(Name = "State :")]
        public List<State> State { get; set; }

        [Required(ErrorMessage = "City Required")] // drodown will show
        [Display(Name = "City :")]
        public List<City> City { get; set; }

        [Required(ErrorMessage = "Language known Required")] // group of checkboxes will show
        [Display(Name = "Language known :")]
        public List<Language> Language { get; set; }

        [Required(ErrorMessage = "Sex Required")] // group of radio button will show
        [Display(Name = "Sex :")]
        public List<Sex> Sex { get; set; }

        [Required(ErrorMessage = "Computer Course Required")] // listbox will show
        [Display(Name = "Computer Course Done :")]
        public List<ComputerCourse> ComputerCourse { get; set; }

    }

    public class State
    {
        public string ID { get; set; }
        public string Name { get; set; }
    }

    public class City
    {
        public string ID { get; set; }
        public string Name { get; set; }
    }

    public class Language
    {
        public string ID { get; set; }
        public string Name { get; set; }
    }

    public class Sex
    {
        public string ID { get; set; }
        public string Type { get; set; }
    }

    public class ComputerCourse
    {
        public string ID { get; set; }
        public string Type { get; set; }
    }
}

1)作为名字&amp;我希望显示文本框的姓氏属性

我希望显示带有日期选择器的文本框的

2)

3)对于DOB属性,我想显示带日期选择器的文本框

4)状态/城市属性我要显示下拉列表或组合

5),我想要显示一组复选框的语言属性

6)对于性别属性,我想显示男性和女性的2个单选按钮女

7)对于我希望显示列表框的计算机课程属性

现在编写一个索引操作方法,该方法将使用虚拟数据填充模型并生成UI。 当单击“保存”按钮时,模型数据将返回到名为“已保存”的操作方法

public ActionResult Save(Student s)
{
   return View(s);
}

or 

public ActionResult Save(StudentViewModel sv)
{
   return View();
}

请帮助新手学习东西。感谢

1 个答案:

答案 0 :(得分:1)

这是一篇关于各种类型的模型绑定的好文章。它不会太长,并且揭开了自动绑定和手动方式的神秘面纱。

http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx

我也同意这个问题的范围有点过于宽泛。我会尽力帮助一下。您可以为get和post请求使用相同的方法名称(加载空页面的是get,当您填写表单时,您将“将表单数据”“发布”回post方法)。你需要指定哪一个使用http'get'以及哪一个使用'post',你可以通过用这样的属性装饰你的方法来实现。

[HttpGet]
public ActionResult Create()//leave it empty youre about to make it
{
     var model = new ObjectType();
     return view(model); // pass the new model ( empty object ) to your view;
}

[HttpPost]
public ActionResult Create(ObjectType theObject){
//MVC will try to populate the values of properties 
//of theObject if they match the names on your form elements
//save it in your database
}