view中使用的不是强类型,Action如何验证并返回一个信息?js 验证不能取代服务器端,因为浏览器可能会禁用js.view使用的不是强类型,ModelState.AddModelError好像就不好使了。高手们是怎么做服务器端 验证的。

解决方案 »

  1.   

    var username=Request.Params["username"];
    然后就判断username的长度什么的~不过我还是比较推荐定义一个实体类
      

  2.   

    禁用js不给他提交
    很多网站你把js给禁了还会有用吗?不是强类型就自己验证呗  然后return json
      

  3.   

    1. 站把JS禁了不工作,那是那些网站设计不合理,JS写得烂
    高水平的网站是完全可以做到JS分离还能work的
    2. 主的情况应该是少数情况,甚至可以说是一个不良设计如果不是强类型,还是可以在controller端的Action里验证if (string.IsNullOrEmpty(name)) { 
    ModelState.AddModelError("name", "Please enter your name"); 
    } if (ModelState.IsValid) { 
    XXX
    } else { 
    return View(); 
    } 从源代码看来,我觉得即使不是一个强类型,这个还是会work的(实际上也是,我简单试了下)
    只要key的名字和后面非强类型的string匹配public void AddModelError(string key, string errorMessage)从这里和里面的代码可见,无论强类型,还是弱类型,Property都会转化为string作为key所以楼主说弱类型AddModelError不work也是不对的
      

  4.   

                string userid = Request["user_id"];
                string oldPasw = Request["txtPassword"];
                string newPasw1 = Request["txtPasw1"];            if (newPasw1.Length < 3)
                {
                    ModelState.AddModelError("txtPasw1", "密码长度必须大于3个字符~~");
                    return View();
                }View:
    @Html.Password("txtPasw1", "", new { style = "width:200px;" })
    @Html.ValidationMessage("txtPasw1")
    我是这样验证的,可是ModelState.AddModelError没反应。
    还需要写其它什么吗?
      

  5.   

     加上@Html.ValidationSummary()试试    @using (Html.BeginForm()) {
            @Html.ValidationSummary()
            <p>Your name: @Html.TextBox(“name”) </p>
            <input type="submit" value="Submit RSVP" />
        }@Html.ValidationMessage("txtPasw1")没试过
      

  6.   

    楼主这样是可以的啊……<body>
        @using (Html.BeginForm()) {
            @Html.ValidationSummary()
            <p>Your name: @Html.Password("name") </p>
            @Html.ValidationMessage("name")
            <input type="submit" value="Submit RSVP" />
        }
    </body>        
    [HttpPost]
            public ViewResult RsvpForm(string name)
            {
                if (string.IsNullOrEmpty(name))
                {
                    ModelState.AddModelError("name", "Please enter your name");
                }            if (ModelState.IsValid)
                {
                    return View("Thanks");
                }
                else
                {
                    // there is a validation error - redisplay the form
                    return View();
                }
            }
      

  7.   

    奇怪,为什么我的不行呢,我把完整代码贴出来,帮我看看哪里有错。
    View:@model Zjgcxx.Model.Web_User@{
        Layout = null;
    }<!DOCTYPE html><html>
    <head>
        <title>修改密码</title>
        <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
        <script src="../../Scripts/jquery-1.8.3.min.js" type="text/javascript"></script>    <script type="text/javascript">
            $(document).ready(function () {
            });        function chkFrm() {
                var pasw0 = $("#txtPassword").val();
                var pasw1 = $("#txtPasw1").val();
                var pasw2 = $("#txtPasw2").val();            if (pasw0 == "") {
                    alert("请输入原密码!");
                    $("#txtPassword").focus();
                    return false;
                }
                if (pasw1.length < 3) {
                    alert("新密码长度不足!");
                    $("#txtPasw1").focus();
                    return false;
                }
                if (pasw1 != pasw2) {
                    alert("新密码不一致!");
                    $("#txtPasw2").focus();
                    return false;
                }            return true;
            }
        </script>
    </head>
    <body>
    <center>    <br /><p style="font-size:18px; font-weight:bold;">修 改 密 码</p><br />
        
        @using (Html.BeginForm("ChangePassword", "AdminUser", FormMethod.Post, new { id = "frm1" }))
        {
            @Html.ValidationSummary()
            @*@Html.HiddenFor(model => model.user_id)*@
            <table border="1" cellpadding="0" cellspacing="0" class="TabStyle" width="500">
                <tr><td style="width:80px;">原 密 码:</td>
                <td>@Html.Password("txtPassword", "", new { style = "width:200px;" })
                @Html.ValidationMessage("txtPassword")
                </td>
                </tr>
                <tr><td>新 密 码:</td>
                <td>@Html.Password("txtPasw1", "", new { style = "width:200px;" })
                @Html.ValidationMessage("txtPasw1")
                </td>
                </tr>
                <tr><td>确认密码:</td>
                <td>@Html.Password("txtPasw2", "", new { style = "width:200px;" })
                @Html.ValidationMessage("txtPasw2")
                </td>
                </tr>
            </table>
            
            <br />
            <input type="submit" value="提 交" @*onclick="return chkFrm();"*@ 
                style="width:70px;" class="button0" onmouseover="this.className='button0_on'" onmouseout="this.className='button0'" />
        }
            <br />
    </center>
    </body>
    </html>
    Cotroller:        public ActionResult ChangePassword()
            {
                Web_User uModel = getLandUser();
                return View(uModel);
            }
            [HttpPost]
            public ViewResult saveChange()
            {
                string userid = Request["user_id"];
                string oldPasw = Request["txtPassword"];
                string newPasw1 = Request["txtPasw1"];
                string newPasw2 = Request["txtPasw2"];
                oldPasw = Tools.ToMD5(oldPasw);
                Web_User uModel = null;            #region
                if (newPasw1.Length < 3)
                {
                    ModelState.AddModelError("txtPasw1", "密码长度必须大于3个字符~~");
                }
                if (ModelState.IsValid)
                {
                    return View("Thanks.");
                }
                else
                {
                    return View();
                }
                if (!newPasw1.Equals(newPasw2))
                {
                    ModelState.AddModelError("txtPasw2", "新密码不一致~~");
                    return View();
                }
                if (userid != null)
                {
                    uModel = userBLL.Get(userid);
                    if (uModel != null)
                    {
                        if (oldPasw != uModel.user_pasw)
                        {
                            ModelState.AddModelError("txtPassword", "原密码不正确~~");
                            return View();
                        }
                        else
                        {
                            newPasw1 = Tools.ToMD5(newPasw1);
                            uModel.user_pasw = newPasw1;
                            int flag = userBLL.Update(uModel);
                            if (flag > 0)
                            {
                                ModelState.AddModelError("lbMsg", "密码修改成功!");
                                return View();
                            }
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("lbMsg", "用户身份无效~~");
                        return View();
                    }
                }
                else
                {
                    ModelState.AddModelError("lbMsg", "用户身份无效~~");
                    return View();
                }
                #endregion            return View();
            }
      

  8.   

    问题1:
    楼主view的名称是什么?问题2:
    Html.BeginForm("ChangePassword", "AdminUser", FormMethod.Post, new { id = "frm1" }))会进入AdminUserController的Action
    [HttpPost]
    ChangePassword 
    但我没有看到这个方法……楼主确定你代码是对的,点提交后能进入ChangePassword的断点?
      

  9.   

    谢谢,原来就是提交的Action名错了。