asp.net mvc CheckBox自定义组件

时间:2013-10-30 13:36:37

标签: jquery asp.net-mvc asp.net-mvc-3 jquery-ui asp.net-mvc-4

我正在使用ASP.net MVC4的VS2010

我需要创建一个带复选框的组件,在这种情况下,组件必须与三个复选框集成,在图像中应作为第三列“Esado de la Pieza”附加。 (我知道我通过插入下拉列表来解决它,但客户想要复选框)。 我该如何创建这个组件?或者在不使用下拉列表的情况下解决此问题?如果数据从查询加载到数据库。

enter image description here

1 个答案:

答案 0 :(得分:0)

我要说的第一件事是,我知道这种方式不是“回答”关于创建自定义复选框的问题,而是给出了我认为处理这种情况的更好方法。当我们使用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

希望它有所帮助。