我在MVC方面非常新,我以前的经验是asp.net web表单,现在我很难在Razor中使用C# asp.net mvc代码第一种方法来添加@Html.DropDownList和@Html.DropDownListFor的验证。
以下是我的设计:
<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,无法添加State和City的require字段
[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,请检查下拉查找。
我的州和城市模范班。
发布于 2018-07-27 13:18:35
您的问题是不应该使用EF域模型作为视图模型。您应该创建一个特定于视图需求的视图模型。然后,您可以将State和City指定为required,而不必在数据库中生成所需的值。
您的域模型应该非常简单,如:
[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; }
}
那么您的视图模型可以如下所示:
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操作时工作所需的值,并将要保存的内容移回实体以保存它。
如果恶意用户了解到您使用域模型作为视图模型,他们可以将数据插入属性,只需将元素添加到浏览器中的表单中,其名称与您认为没有公开的属性的名称相同。另一个原因是,您必须确保将模型中的每个值返回给控制器,否则在回发时将清除模型中的值。只有将这些值放入带有名称的输入中才能做到这一点。这将为恶意用户提供他们所需的一切,以确定要更改什么。
使用特定于数据表示的单独视图模型是一种更好的做法。然后将数据从视图模型映射到域模型,反之亦然。
https://stackoverflow.com/questions/51557606
复制相似问题