首页 新闻 会员 周边 捐助

mvc4注册页面表单数据提交出错了

-4
悬赏园豆:100 [已解决问题] 解决于 2013-10-17 22:14

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>
}
View Code

卡在了 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表单这方面相关的网站教程就好了。要求代码尽量简洁,高效的。

Cherbim的主页 Cherbim | 菜鸟二级 | 园豆:323
提问于:2013-10-12 17:52
< >
分享
最佳答案
0

同上,没明白问题出在什么地方;

如果字段不匹配,你可以采用一个Model,一个ViewModel的方式。

另外也可以对实体添加数据注解,不会在界面自动生成。

还可以自己控制界面,这个很灵活。

收获园豆:80
幻天芒 | 高人七级 |园豆:37205 | 2013-10-13 22:52

 我是写在同一个类里啊,但是注册不需要添加那么多字段啊。就算用viewbag也要把其他的字段写null然后传上去?不懂啊 好晕。

Cherbim | 园豆:323 (菜鸟二级) | 2013-10-14 20:51

@Cherbim: 前台显示的字段是你自己写的,后台数据访问也要你自己写。显示字段和保存到数据库的字段还不是你说了算。

幻天芒 | 园豆:37205 (高人七级) | 2013-10-15 11:54

@幻天芒: 那就是没办法像自带的那个create那样

                    db.Users.Add(Users);
          
                   db.SaveChanges();

两行代码解决是吧

Cherbim | 园豆:323 (菜鸟二级) | 2013-10-15 21:48

@Cherbim: 可以这么说,大部分情况下还是可以的(到后台之后,你直接对Users处理一下,然后再Add)。一般有用于前台绑定的ViewModel,还有数据库交互的DataModel。

幻天芒 | 园豆:37205 (高人七级) | 2013-10-16 10:02
其他回答(5)
0

你自己再根据注册用户时需要的字段写一个模型类,然后根据这个模型类生成view的代码就行了。

jone_e | 园豆:1410 (小虾三级) | 2013-10-13 08:48

我是写在同一个类里啊,但是我不知道在 Controllers里要怎么写才能把那2个字段成功更新到数据库里。

支持(1) 反对(0) Cherbim | 园豆:323 (菜鸟二级) | 2013-10-14 20:48
1

没明白楼主是哪里出现问题

sinhbv | 园豆:2579 (老鸟四级) | 2013-10-13 08:50

就是我整个模型类写了很多字段,但是我注册的时候仅需要提交邮箱,密码这两项内容,我不知道在 Controllers里要怎么写才能把那2个字段成功更新到数据库里。

支持(0) 反对(0) Cherbim | 园豆:323 (菜鸟二级) | 2013-10-14 20:46
0

推荐看看官方Music store 源码

这个问题跟mvc几没关系

smallerpig | 园豆:246 (菜鸟二级) | 2013-10-14 08:56
0

你不用那么多,直接把页面上那些表单项删掉,实体中去掉对应的RequireAttribute不就行了

空葫芦 | 园豆:9 (初学一级) | 2013-10-14 09:36

我就是要上传表单数据啊同学...

支持(0) 反对(0) Cherbim | 园豆:323 (菜鸟二级) | 2013-10-14 20:52

@Cherbim: “我用那个自带的create产生的页面产生太多多余的字段了,但自己做就这熊样”

多余的字段是指什么,不是对应多余的表单项吗。

支持(0) 反对(0) 空葫芦 | 园豆:9 (初学一级) | 2013-10-15 09:54

@空葫芦: 我把整个模型都发了啊,你看一下吧

支持(0) 反对(0) Cherbim | 园豆:323 (菜鸟二级) | 2013-10-15 21:46
0

Users myUser=new Users()

myUser.Email=Users.Email

myUser.Password=Users.Password

db.Users.Add(Users);

收获园豆:19
疯雨 | 园豆:221 (菜鸟二级) | 2013-10-15 08:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册