EF+MVC+Bootstrap 项目实践 Day6

不管怎样昨天已经调的能登进系统了,各种遗留暂时不管了。今天打算做下新建用户和首页基本布局

看了下源码,没有判断注册用户的,跳转到的index.html也是没有的,看来要自已写。

            if(password != rePassword){
                ModelState.AddModelError("error", "两次密码不一致");
                return RedirectToAction("Login");
                //return View("Login");
            }

1、两种跳转形式有所不同

return RedirectToAction是真正的跳转,但错误提示就没有了,不知怎么带过去,找资料中

return View("Login")不会刷新跳转(像是ajax那样,还保留在页面),可以显示错误提示,但地址栏就变成Auth/Register(因为form和方法命名成Register),此时还是在原注册表单上,再想登陆就不行了,提交的都是注册的操作

===========================

在网上找到一篇比机翻还不如的资料,好歹代码是英文的看懂了,比较好的解决了这问题

    if(password != rePassword){
                ModelState.AddModelError("error", "两次密码不一致");
                TempData["CheckResult"] = ViewData;
                return RedirectToAction("Login");
            }
    [AuthorizeIgnore]
        public ActionResult Login()
        {
            if(TempData["CheckResult"] != null) ViewData = (ViewDataDictionary) TempData["CheckResult"];
            return View();
        }

利用TempData把ModelState.AddModelError之类的存起来,在View中取出来,现在既实现了跳转,也有相应提示文字了

2、带Label的Checkbox

@Html.CheckBox("Agreement", false)
@Html.Label("Agreement", "我同意此协议")

如果设定了CheckBox的class="checkbox",bootstrap默认的checkbox样式是display:block,所以要注意一下

就这两行,也折腾了挺久。原先好好的html,要用Razor表达出来,就像要从头学起一样。

另外查资料时还发现一个坑:

如果checkbox被选中,则服务器收到的true,false。

checkbox未选中,因为有hidden的input存在所以服务器则收到flase。

那么,我们用如下代码即可获得checkbox的选中状态

Request.forms[Key].Contains("true"); 

3、后台获取表单资料

    
  //1、直接使用Request
  public ActionResult HandleForm() { ViewData["name"] = Request["name"]; ViewData["favColor"] = Request["favColor"]; ViewData["bookType"] = Request["bookType"]; ViewData["pet"] = Request["pets"]; return View("FormResults"); }
  //2、使用name一一对应的参数
public ActionResult HandleForm(string name, string favColor, Boolean bookType, string pets) { ViewData["name"] = name; ViewData["favColor"] = favColor; ViewData["bookType"] = bookType; ViewData["pet"] = pets; return View("FormResults"); }
  3、使用FormCollection
public ActionResult HandleForm(FormCollection form) { ViewData["name"] = form["name"]; ViewData["favColor"] = form["favColor"]; ViewData["bookType"] = form["bookType"]; ViewData["pet"] = form["pets"]; return View("FormResults"); }
  4、使用实体作为Action参数传入,前提是提交的表单元素名称与实体属性名称一一对应 [HttpPost]
public ActionResult HandleForm(InforModel infor) { ViewData["name"] = infor.name; ViewData["favColor"] = infor.favColor; ViewData["bookType"] = infor.bookType; ViewData["pet"] = infor.pets; return View("FormResults"); }

 

资料取自友军,好像最近博客园管的挺严?不能出现其它网址?所以避避嫌只截图吧

另外,未经允许不得转载也挺坑的,转部份代码算不算转载?这种三年前的贴子,要再联系博主征得许可,黄花菜都凉了,而且有些博主写到一半都废弃了。

不管怎样,还是把上面那段代码转过来吧,写的不错,解决了我的困惑,也希望能帮忙到其它新手。

===============

试了一下,基本注册可以了,要注意密码保存是加密。另外,最好有个提示注册成功,几秒后再进入首页,暂时就先不搞了,明天来做首页

原文地址:https://www.cnblogs.com/liuyouying/p/5046562.html