model
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.EnterpriseServices;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcB2CBookOnlineShopping.Models
{
//以业务为主的用户模式
[Table("Users")]
public class Users
{
[Required]
public int ID { get; set; }
[Required(ErrorMessage = "请输入用户邮箱")]
[Display(Name = "邮箱")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required(ErrorMessage = "请输入密码")]
[Display(Name = "密码")]
[DataType(DataType.Password)]
[StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 6)]
public string Pwd { get; set; }
[Display(Name = "重复密码")]
[DataType(DataType.Password)]
[Compare("Pwd", ErrorMessage = "密码与重复密码必须相同")]
public string RePassword { get; set; }
[Display(Name = "邮箱")]
[DataType(DataType.Text)]
public string Question { get; set; }
[Display(Name = "答案")]
[DataType(DataType.Text)]
public string Answers { get; set; }
[Display(Name = "头像")]
[DataType(DataType.ImageUrl)]
public string Image { get; set; }
[Display(Name = "昵称")]
[DataType(DataType.Text)]
public string Nickname { get; set; }
[Display(Name = "居住地")]
[DataType(DataType.Text)]
public string Residence { get; set; }
[Display(Name = "性别")]
[DataType(DataType.Text)]
public string Sex { get; set; }
[Display(Name = "身份")]
[DataType(DataType.Text)]
public string Position { get; set; }
[Display(Name = "生日")]
[DataType(DataType.DateTime)]
public string Birthday { get; set; }
[Display(Name = "博客")]
[DataType(DataType.Text)]
public string Blog { get; set; }
[Display(Name = "居住状态")]
[DataType(DataType.Text)]
public string Status { get; set; }
[Display(Name = "爱好")]
[DataType(DataType.Text)]
public string Hobby { get; set; }
[Display(Name = "偶像")]
[DataType(DataType.Text)]
public string Idol { get; set; }
}
////以页面为主的用户登陆模型
//以页面为主的用户注册模式
public class RegeditModel
{
public string ID { get; set; }
[Required(ErrorMessage = "请输入用户邮箱")]
[Display(Name = "邮箱")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required(ErrorMessage = "请输入密码")]
[Display(Name = "密码")]
[DataType(DataType.Password)]
public string Pwd { get; set; }
[Display(Name = "重复密码")]
[DataType(DataType.Password)]
public string RePassword { get; set; }
}
public class BookOnlineShoppingSystemDBContext : DbContext
{
public DbSet<Users> BookOnlineShoppingSystem { get; set; }
}
}
view
@model MvcB2CBookOnlineShopping.Models.RegeditModel @{ ViewBag.Title = "testcreate"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>testcreate</h2> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>RegeditModel</legend> <div class="editor-label"> @Html.HiddenFor(model => model.ID) @Html.LabelFor(model => model.Email) </div> <div class="editor-field"> @Html.EditorFor(model => model.Email) @Html.ValidationMessageFor(model => model.Email) </div> <div class="editor-label"> @Html.LabelFor(model => model.Pwd) </div> <div class="editor-field"> @Html.EditorFor(model => model.Pwd) @Html.ValidationMessageFor(model => model.Pwd) </div> <div class="editor-label"> @Html.LabelFor(model => model.RePassword) </div> <div class="editor-field"> @Html.EditorFor(model => model.RePassword) @Html.ValidationMessageFor(model => model.RePassword) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> }
卡在了 Controllers这里。
[HttpPost] public ActionResult testcreate(RegeditModel Users) { if (ModelState.IsValid) { try { //WebSecurity.CreateUserAndAccount(Users.Email, Users.Pwd); //WebSecurity.Login(Users.Email, Users.Pwd); //return RedirectToAction("Index", "Home"); db.Users.Add(Users); db.SaveChanges(); return RedirectToAction("Index"); } catch (MembershipCreateUserException e) { ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); } } return View(Users); }
用户表字段做了很多,但注册的时候不用那么多啊。我用那个自带的create产生的页面产生太多多余的字段了,但自己做就这熊样,唉。求教啊...
还有能介绍MVC4表单这方面相关的网站教程就好了。要求代码尽量简洁,高效的。
同上,没明白问题出在什么地方;
如果字段不匹配,你可以采用一个Model,一个ViewModel的方式。
另外也可以对实体添加数据注解,不会在界面自动生成。
还可以自己控制界面,这个很灵活。
我是写在同一个类里啊,但是注册不需要添加那么多字段啊。就算用viewbag也要把其他的字段写null然后传上去?不懂啊 好晕。
@Cherbim: 前台显示的字段是你自己写的,后台数据访问也要你自己写。显示字段和保存到数据库的字段还不是你说了算。
@幻天芒: 那就是没办法像自带的那个create那样
db.Users.Add(Users);
db.SaveChanges();
两行代码解决是吧
@Cherbim: 可以这么说,大部分情况下还是可以的(到后台之后,你直接对Users处理一下,然后再Add)。一般有用于前台绑定的ViewModel,还有数据库交互的DataModel。
你自己再根据注册用户时需要的字段写一个模型类,然后根据这个模型类生成view的代码就行了。
我是写在同一个类里啊,但是我不知道在 Controllers里要怎么写才能把那2个字段成功更新到数据库里。
没明白楼主是哪里出现问题
就是我整个模型类写了很多字段,但是我注册的时候仅需要提交邮箱,密码这两项内容,我不知道在 Controllers里要怎么写才能把那2个字段成功更新到数据库里。
推荐看看官方Music store 源码
这个问题跟mvc几没关系
你不用那么多,直接把页面上那些表单项删掉,实体中去掉对应的RequireAttribute不就行了
我就是要上传表单数据啊同学...
@Cherbim: “我用那个自带的create产生的页面产生太多多余的字段了,但自己做就这熊样”
多余的字段是指什么,不是对应多余的表单项吗。
@空葫芦: 我把整个模型都发了啊,你看一下吧
Users myUser=new Users()
myUser.Email=Users.Email
myUser.Password=Users.Password
db.Users.Add(Users);