Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 正在使用数据val=";“真的”;正确的方法,强制进行所需的验证_Asp.net Mvc_Html_Razor - Fatal编程技术网

Asp.net mvc 正在使用数据val=";“真的”;正确的方法,强制进行所需的验证

Asp.net mvc 正在使用数据val=";“真的”;正确的方法,强制进行所需的验证,asp.net-mvc,html,razor,Asp.net Mvc,Html,Razor,我的asp.net mvc web应用程序中有以下视图:- @using (Ajax.BeginForm("CheckUserPermision", "SecurityRole", new AjaxOptions { HttpMethod = "get", InsertionMode = InsertionMode.Replace, LoadingElementId = "progress2", UpdateTargetId = "userSecurityRol

我的asp.net mvc web应用程序中有以下视图:-

@using (Ajax.BeginForm("CheckUserPermision", "SecurityRole", 
new AjaxOptions
{
    HttpMethod = "get",
    InsertionMode = InsertionMode.Replace,
    LoadingElementId = "progress2",
    UpdateTargetId = "userSecurityRole"
}))
{


  <div>
    <span class="f">User Name </span> 
        <input  name="username" type="text" data-val="true" data-val-required= "Please enter a value." data-autocomplete-source= "@Url.Action("AutoComplete", "SecurityGroup")"  /> 
<span class="field-validation-valid" data-valmsg-for="username" data-valmsg-replace="true"></span>

</div>
@使用(Ajax.BeginForm(“checkuserpermission”、“SecurityRole”,
新选择
{
HttpMethod=“get”,
InsertionMode=InsertionMode.Replace,
LoadingElementId=“progress2”,
UpdateTargetId=“userSecurityRole”
}))
{
用户名

目前,除非用户在“用户名”字段中输入文本,否则用户将无法进行搜索。但我的问题是,使用
data val=“true
”强制进行所需字段验证的正确方法是什么?

否。只需使用ViewModel即可

public class SearchNameViewModel
{   
   [Required]
   public string UserName { get;set; }

}
查看

@model SearchNameViewModel
@using (Ajax.BeginForm("CheckUserPermision", "SecurityRole", 
new AjaxOptions
{
    HttpMethod = "get",
    InsertionMode = InsertionMode.Replace,
    LoadingElementId = "progress2",
    UpdateTargetId = "userSecurityRole"
}))
{


  <div>
    @Html.LabelFor(x => x.UserName)
    @Html.TextBoxFor(x => x.UserName,
     new { data_autocomplete_source = Url.Action("AutoComplete", "SecurityGroup") })
    @Html.ValidationMessageFor(x => x.UserName)
</div>
@model SearchNameViewModel
@使用(Ajax.BeginForm(“checkuserpermission”、“SecurityRole”,
新选择
{
HttpMethod=“get”,
InsertionMode=InsertionMode.Replace,
LoadingElementId=“progress2”,
UpdateTargetId=“userSecurityRole”
}))
{
@LabelFor(x=>x.UserName)
@Html.TextBoxFor(x=>x.UserName,
新的{data\u autocomplete\u source=Url.Action(“autocomplete”,“SecurityGroup”)})
@Html.ValidationMessageFor(x=>x.UserName)

一个是客户端验证,另一个是服务器端验证。正确的安全编码标准要求您同时使用这两种验证。服务器端验证(查看模型数据注释)更安全,但是客户端验证允许您在发送请求之前发现问题。

我知道这也会起作用,但我的方法有什么问题吗?谢谢,我只是认为这更灵活。就像将来如果您想添加更多验证或添加属性,您可以将它们都放在一个地方而且验证很容易应用到视图中,我认为它生成的代码看起来更干净。客户端验证非常方便,极大地改善了用户体验。服务器端验证是绝对必须的,因为客户端验证不可信。所以我同意,两者都是必要的圣。