动态生成复选框,作为托运选择他们中的一些 [英] Generate Dynamically Checkboxes, And Select Some of them as Checked

查看:159
本文介绍了动态生成复选框,作为托运选择他们中的一些的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我的问题是这样的,



我有两个名单



列表中包含的内容。




  1. 项目1

  2. 项目2

  3. 项目3

  4. 第4项

  5. 项目5



和列表b包含




  1. 项目1

  2. 项目2

  3. 项目3

  4. 第4项

  5. ......

  6. ...

  7. 项目10



所有我想要做的就是在MVC的Razor视图动态生成复选框在b中的所有项目,这些复选框,检查(选择)的所有复选框为A.
的所有项目作为一个将永远是b的子集。



和然后用户可以检查,取消选中的框,这些值可以传递给控制器​​降耗的目的。列表中的一个将用新的值更新,也就是说用户选择。



任何帮助吗?



更新1:
我能够得到所有的项目在Model.CheckboxSelections在视图中。我不希望使用的局部视图。我想类似下面的事,但仍然缺少

  @for(INT I = 0; I<产品型号。 CheckboxSelections.Count;我++)
{
@ Html.CheckBox(Model.CheckboxSelections [I] .Sku.ToString(),Model.CheckboxSelections [I] .IsChecked.ToString())
}


解决方案

通过重复自己,我会开始有一定的危险性我的答案与下面的句子:




一如往常,在ASP.NET MVC应用程序,你应该使用视图模型




所以:

 公共类MyViewModel 
{
公共字符串名称{;组; }
公共BOOL {器isChecked获得;组; }
}



然后控制器:

 公共类HomeController的:控制器
{
公众的ActionResult指数()
{
//那是你的域模型
//他们可能来自数据库或什么
VAR = listA的新[] {项目1,项目2,项目3,4项,第5项};
变种数组listB =新[] {项目1,项目2,项目3,第4项,第5项,第6项,项目7,第8项 第9项,项目10};

//现在让我们的域模型映射到我们的视图模型
VAR模型= listB.Select(X =>新建MyViewModel
{
名称= X,
=器isChecked listA.Contains(X)
});

返回查看(模型);
}

[HttpPost]
公众的ActionResult指数(IEnumerable的< MyViewModel>模型)
{
VAR selectedItems = model.Where(X => x.IsChecked);
变种格式=的string.join(,,selectedItems.Select(X => x.Name));
返回内容(感谢您选择+格式);
}
}



然后是相应的视图( 〜/查看/主页/ Index.cshtml ):

  @model IEnumerable的< MyViewModel> 

@using(Html.BeginForm())
{
@ Html.EditorForModel()
将按钮类型=提交>确定< /按钮> ;
}

和最后将被自动呈现的每个元素对应的编辑器模板模型集合(〜/查看/主页/ EditorTemplates / MyViewModel.cshtml ):

  @model MyViewModel 

< DIV>
@ Html.HiddenFor(X => x.Name)
@ Html.LabelFor(X => x.IsChecked,Model.Name)
@ Html.CheckBoxFor(X => ; x.IsChecked)
< / DIV>

和渲染的结果(我的Chrome浏览器可以看到)看起来是这样的:





看到它是多么容易,当您使用视图模型?


So my problem goes like this,

I have two lists

LIST A contains.

  1. Item 1
  2. Item 2
  3. Item 3
  4. Item 4
  5. Item 5

And List B Contains

  1. Item 1
  2. Item 2
  3. Item 3
  4. Item 4
  5. .....
  6. ....
  7. Item 10

All i want to do is Generate Checkboxes dynamically in MVC Razor View for all the items in B, and of those checkboxes, check(select) all the checkboxes for all the items in A. As A will always be a subset of B.

And then a user can check-uncheck any boxes, and those values can be passed to controller for Saving purposes. The List A will be updated with new values, that user selects.

Any Help ?

UPDATE 1: I am able to get all the items in Model.CheckboxSelections in view. I don't want to use a partial view. I am trying something like following, but something is still missing.

         @for (int i = 0; i < Model.CheckboxSelections.Count; i++)
        {
@Html.CheckBox(Model.CheckboxSelections[i].Sku.ToString(), Model.CheckboxSelections[i].IsChecked.ToString())
     }

解决方案

With a certain risk of repeating myself I would start my answer with the following sentence:

As always in ASP.NET MVC application you should use a view model.

So:

public class MyViewModel
{
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}

then a controller:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Those are your domain models
        // they could come from a database or something
        var listA = new[] { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
        var listB = new[] { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10" };

        // Now let's map our domain model to our view model
        var model = listB.Select(x => new MyViewModel
        {
            Name = x,
            IsChecked = listA.Contains(x)
        });

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<MyViewModel> model)
    {
        var selectedItems = model.Where(x => x.IsChecked);
        var format = string.Join(",", selectedItems.Select(x => x.Name));
        return Content("Thank you for selecting " + format);
    }
}

then a corresponding view (~/Views/Home/Index.cshtml):

@model IEnumerable<MyViewModel>

@using (Html.BeginForm())
{
    @Html.EditorForModel()
    <button type="submit">OK</button>
}

and finally the corresponding editor template which will be automatically rendered for each element of the model collection (~/Views/Home/EditorTemplates/MyViewModel.cshtml):

@model MyViewModel

<div>
    @Html.HiddenFor(x => x.Name)
    @Html.LabelFor(x => x.IsChecked, Model.Name)
    @Html.CheckBoxFor(x => x.IsChecked)
</div>

and the rendered result (as seen by my Chrome browser) looks like this:

See how easy it is when you use view models?

这篇关于动态生成复选框,作为托运选择他们中的一些的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆