首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Razor中@Html.DropDownList和@Html.DropDownListFor的C# asp.net mvc代码优先验证方法

Razor中@Html.DropDownList和@Html.DropDownListFor的C# asp.net mvc代码优先验证方法
EN

Stack Overflow用户
提问于 2018-07-27 12:06:16
回答 2查看 1.9K关注 0票数 0

我在MVC方面非常新,我以前的经验是asp.net web表单,现在我很难在Razor中使用C# asp.net mvc代码第一种方法来添加@Html.DropDownList和@Html.DropDownListFor的验证。

以下是我的设计:

代码语言:javascript
运行
复制
   <div class="form-group">
        @Html.LabelFor(model => model.State, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("States", new SelectList(ViewBag.States as System.Collections.IEnumerable, "StateId", "StateName", new { @class = "control-label col-md-2" }), "Select a State", new { id = "dd_State" })

        </div>
    </div>

      <div class="form-group">
        @Html.LabelFor(model => model.City, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(Model => Model.City, new SelectList(Enumerable.Empty<SelectListItem>(), "CityName", "CityName"),"Select a City", new { id = "dd_City" })
            <span id="span1" name="span1"></span>
          </div>
      </div>

下面是我的模型代码Register.cs,无法添加StateCity的require字段

代码语言:javascript
运行
复制
  [Table("Register")]
public class Register
{
    [Key]
    public int Sno { get; set; }
    [Required(ErrorMessage = "Name is required.")]
    [Display(Name = "Full name")]
    public string Fullname { get; set; }
    [Display(Name = "Email Id")]
    [Required(ErrorMessage = "Email is required.")]
    public string EmailId { get; set; }
    [Required(ErrorMessage = "Password is required.")]
    public string Password { get; set; }
    [Required(ErrorMessage = "Mobile is required.")]
    public string Mobile { get; set; }
    [Required(ErrorMessage = "Address is required.")]
    public string Address { get; set; }
    public string State { get; set; }
    public string City { get; set; }
    [Required(ErrorMessage = "Entity is required.")]
    public string EntityType { get; set; }
    public string Website { get; set; }
    public string PinCode { get; set; }
    public string accountactivated { get; set; }

}

另外,我无法添加引导css到@Html.DropDownList和@Html.DropDownListFor,请检查下拉查找。

在这里输入图像描述

我的州和城市模范班。

在这里输入图像描述

在这里输入图像描述

EN

Stack Overflow用户

发布于 2018-07-27 13:18:35

您的问题是不应该使用EF域模型作为视图模型。您应该创建一个特定于视图需求的视图模型。然后,您可以将State和City指定为required,而不必在数据库中生成所需的值。

您的域模型应该非常简单,如:

代码语言:javascript
运行
复制
[Table("Register")]
public class Register
{
    [Key]
    public int Sno { get; set; }
    [Required(ErrorMessage = "Name is required.")]
    [Display(Name = "Full name")]
    public string Fullname { get; set; }
    [Display(Name = "Email Id")]
    [Required(ErrorMessage = "Email is required.")]
    public string EmailId { get; set; }
    [Required(ErrorMessage = "Password is required.")]
    public string Password { get; set; }
    [Required(ErrorMessage = "Mobile is required.")]
    public string Mobile { get; set; }
    [Required(ErrorMessage = "Address is required.")]
    public string Address { get; set; }
    public string State { get; set; }
    public string City { get; set; }
    [Required]
    public string EntityType { get; set; }
    public string Website { get; set; }
    public string PinCode { get; set; }
    public string accountactivated { get; set; }
}

那么您的视图模型可以如下所示:

代码语言:javascript
运行
复制
public class RegisterViewModel
{
    public int Sno { get; set; }
    [Required(ErrorMessage = "Name is required.")]
    [Display(Name = "Full name")]
    public string Fullname { get; set; }
    [Display(Name = "Email Id")]
    [Required(ErrorMessage = "Email is required.")]
    public string EmailId { get; set; }
    [Required(ErrorMessage = "Password is required.")]
    public string Password { get; set; }
    [Required(ErrorMessage = "Mobile is required.")]
    public string Mobile { get; set; }
    [Required(ErrorMessage = "Address is required.")]
    public string Address { get; set; }
    [Required(ErrorMessage = "State is required.")]
    public string State { get; set; }
    [Required(ErrorMessage = "City is required.")] 
    public string City { get; set; }
    [Required(ErrorMessage = "Entity is required.")]
    public string EntityType { get; set; }
    public string Website { get; set; }
    public string PinCode { get; set; }
    public string accountactivated { get; set; }
 }

现在需要在表单上输入城市和州,而不需要在数据库中输入。除非将迁移添加到上下文中,否则不会为该类创建迁移,这正是您不想做的。

现在,您只需加载视图在HttpGet操作时工作所需的值,并将要保存的内容移回实体以保存它。

如果恶意用户了解到您使用域模型作为视图模型,他们可以将数据插入属性,只需将元素添加到浏览器中的表单中,其名称与您认为没有公开的属性的名称相同。另一个原因是,您必须确保将模型中的每个值返回给控制器,否则在回发时将清除模型中的值。只有将这些值放入带有名称的输入中才能做到这一点。这将为恶意用户提供他们所需的一切,以确定要更改什么。

使用特定于数据表示的单独视图模型是一种更好的做法。然后将数据从视图模型映射到域模型,反之亦然。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51557606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档