【问题标题】:asp.net mvc CheckBox custom componentasp.net mvc CheckBox 自定义组件
【发布时间】:2013-10-30 13:36:36
【问题描述】:
我正在使用带有 ASP.net MVC4 的 VS2010
我需要创建一个带有复选框的组件,在这种情况下,该组件必须与三个复选框集成,在应该作为第三列“Esado de la Pieza”附加的图像中。 (我知道我通过插入一个下拉列表来解决它,但客户想要复选框)。
我如何创建这个组件?或者在不使用下拉列表的情况下解决这个问题?如果数据从查询加载到数据库。
【问题讨论】:
标签:
jquery
asp.net-mvc
asp.net-mvc-3
jquery-ui
asp.net-mvc-4
【解决方案1】:
我要说的第一件事是,我知道这种方式不是“回答”您关于创建自定义复选框的问题,而是为您提供我认为更好的方式来处理这种情况.当我们处理 CRUD 视图时,有时我们的业务对象没有视图所需的必要信息,或者在某些情况下它们拥有的信息比我们需要的多得多。所以我推荐使用 ViewModels。
viewModel 应该是这样的(我只是放置第一个属性 Mascara,并假设您的对象称为 Form):
public class FormViewModel()
{
public int MascaraCant { get; set; }
public Boolean MascaraBueno { get; set; }
public Boolean MascaraRegular { get; set; }
public Boolean MascaraDeficiente { get; set; }
public string MascaraObservaciones { get; set; }
}
这是您的控制器将从 get 方法发送到视图的对象,然后在视图中的 post 方法中接收。你的控制器应该是这样的。
public class FormController: Controller
{
public ActionResult Create()
{
return View(new FormViewModel());
}
[HttpPost]
public ActionResult Create(FormViewModel model)
{
var form = new Form();
//Properties that no need any logic to be mapped
form.MascaraCant= model.MascaraCant;
form.MascaraObservaciones = model.MascaraObservaciones;
//This is where I put the logic to be mapped
if(model.MascaraBueno)
form.EstadoDeLaPieza = "Bueno";
else if(model.MascaraRegular)
form.EstadoDeLaPieza = "Regular";
else if(model.MascaraDeficiente)
form.EstadoDeLaPieza = "Deficiente";
Save(form);
return View(new FormViewModel());
}
}
如您所见,我所做的只是使用不同的对象将我的控制器与视图通信,这样我就可以使用每个视图所需的不同工具。可能是列表中的可用数据,如城市、国家等。
对于像 MascaraCant 这样不需要映射逻辑的属性,我建议您使用 nugget package called AutoMapper
希望它有所帮助。