【问题标题】:asp.net mvc CheckBox custom componentasp.net mvc CheckBox 自定义组件
【发布时间】:2013-10-30 13:36:36
【问题描述】:

我正在使用带有 ASP.net MVC4 的 VS2010

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

【问题讨论】:

  • 我建议使用 ViewModel,stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc 您的 viewModel 可以具有三个属性“Bueno”、“Regular”、“Deficiente”,当您要将 viewModel 与您的业务模型映射时,您制定逻辑以将“Estado de la pieza”的值设置为等于所选视图模型的属性。如果您想了解更多信息,我可以写一个正确的答案。
  • 嗨 Guillelon,是的,我需要更多信息。

标签: 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

希望它有所帮助。

【讨论】:

    猜你喜欢
    • 2011-01-10
    • 2011-12-20
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2020-02-07
    • 2021-09-09
    相关资源
    最近更新 更多