Asp.net mvc 3 MVC3列表框内容到模型值

Asp.net mvc 3 MVC3列表框内容到模型值,asp.net-mvc-3,model,listbox,Asp.net Mvc 3,Model,Listbox,我正在使用ASP.NET MVC3,我想知道是否有任何方法可以创建一个列表框,其中包含我希望模型具有的值 使用@Html.ListBoxFor仅在提交表单时将所选项目存储到模型中,而不是列表框中的所有项目。我计划使用javascript从另一个文本框添加项目 谢谢您不清楚,但您是否正在尝试将值发回?如果是,则必须选择(即激活)表单值才能过帐。如果您使用JavaScript将选项添加到列表框(HTML select>),则这些选项不会发布。您需要启用多选功能选择,然后将要提交的每个值标记为选中 若

我正在使用ASP.NET MVC3,我想知道是否有任何方法可以创建一个列表框,其中包含我希望模型具有的值

使用@Html.ListBoxFor仅在提交表单时将所选项目存储到模型中,而不是列表框中的所有项目。我计划使用javascript从另一个文本框添加项目


谢谢

您不清楚,但您是否正在尝试将值发回?如果是,则必须选择(即激活)表单值才能过帐。如果您使用JavaScript将选项添加到列表框(HTML select>),则这些选项不会发布。您需要启用多选功能选择,然后将要提交的每个值标记为选中


若要返回值,他们需要以某种方式发布。

您不清楚,但是否尝试返回值?如果是,则必须选择(即活动)表单值才能发布。如果您使用JavaScript向列表框添加选项(HTML选择>然后这些不会发布。您需要启用多选功能选择,然后将要提交的每个值标记为选中


若要返回值,他们需要以某种方式发布。

否。这与MVC3无关。这是HTTP模型的一个限制。发布表单时,浏览器仅发布选定的值。它不会发布选择列表的其他元素


MVC必须在浏览器工作方式的框架内工作,这是不能更改的。

否。这与MVC3无关。这是HTTP模型的一个限制。发布表单时,浏览器只发布选定的值。它不发布选择列表的其他元素


MVC必须在浏览器工作方式的框架内工作,这是不能改变的。

是的,你可以这样做。但是,你需要一些东西来实现这一点,这可能会很麻烦

鉴于:

//generate list box with 
<select id="NAMEOFLISTBOX" name="NAMEOFLISTBOX" multiple="multiple">
//使用生成列表框
好的,这是大多数人错过的部分。控制器只会收集实际指定要选择的选定项目。因此,在提交按钮所在的位置,您需要包含一些javascript

<input type="submit" value="DO WORK" onclick="selectLISTBOXITEMS()" />

脚本:

function selectLISTBOXITEMS(){
    var curList = document.getElementById("NAMEOFLISTBOX");
    for (var i = 0; i < curList.length; i++) {
        curList.options[i].selected = true;
    }
}
函数selectLISTBOXITEMS(){
var curList=document.getElementById(“列表框名称”);
对于(变量i=0;i
在控制器中:

[HttpPost]
public ActionResult controllerName(List<string> NAMEOFLISTBOX)
{
    foreach(string s in NAMEOFLISTBOX)
    {
        //do work
    }
    return RedirectToAction("controllerGet");
}
[HttpPost]
公共行动结果控制器名称(列表框的列表名称)
{
foreach(NAMEOFLISTBOX中的字符串s)
{
//工作
}
返回重定向到操作(“控制器集”);
}

这不是不可能的,但我第一次这样做时,花了一段时间才弄清楚为什么没有发送任何邮件。

是的,你可以这样做。不过,你需要一些东西来完成这项工作,这可能会很麻烦

鉴于:

//generate list box with 
<select id="NAMEOFLISTBOX" name="NAMEOFLISTBOX" multiple="multiple">
//使用生成列表框
好的,这是大多数人错过的部分。控制器只会收集实际指定要选择的选定项目。因此,在提交按钮所在的位置,您需要包含一些javascript

<input type="submit" value="DO WORK" onclick="selectLISTBOXITEMS()" />

脚本:

function selectLISTBOXITEMS(){
    var curList = document.getElementById("NAMEOFLISTBOX");
    for (var i = 0; i < curList.length; i++) {
        curList.options[i].selected = true;
    }
}
函数selectLISTBOXITEMS(){
var curList=document.getElementById(“列表框名称”);
对于(变量i=0;i
在控制器中:

[HttpPost]
public ActionResult controllerName(List<string> NAMEOFLISTBOX)
{
    foreach(string s in NAMEOFLISTBOX)
    {
        //do work
    }
    return RedirectToAction("controllerGet");
}
[HttpPost]
公共行动结果控制器名称(列表框的列表名称)
{
foreach(NAMEOFLISTBOX中的字符串s)
{
//工作
}
返回重定向到操作(“控制器集”);
}

这不是不可能的,但我第一次这么做时,花了一段时间才弄清楚为什么没有发送任何内容。

好吧,这是一种方法,但它非常有黑客味。如果您在回发中需要值,只需将控制器设计为从数据库中获取值就更好了。这属于“让我赢”的范畴ce,如果我在真实代码中看到它的话。这不是为了填充listbox,而是为了将listbox的值发布到控制器。他说他想用javascript手动填充listbox,这就是为什么我在这里保留select标记的原因。理想情况下,您应该传入一个类型化模型,然后使用@Html.ListBoxFor(x=>x…)在模型中有IEnumerable来保存listbox值的地方填充和绑定listbox。我仍然认为这是一种黑客行为。我会改为使用隐藏字段来存储字段,或者在移动值时使用Ajax将值发布到控制器,保持模型状态与视图同步。或者我只发布在提交之前,通过ajax将listbox发送给控制器。我喜欢您使用ajax保持listbox同步的想法,这绝对是一种保持页面异步的方法-但是,并非所有更改都应立即提交到数据库,这就是为什么一篇文章对用户来说很好。我只是试图解释OP提出的问题,一个老实说,这是一个模糊的问题。在DOM中添加多个隐藏字段似乎也有点黑客行为,就像在调用post之前将列表框发布到与post不同的控制器一样。好吧,这是一种方法,但它有点黑客行为。简单地设计控制器以从数据库获取值要好得多相反,如果您在回发中需要它们。如果我在真实代码中看到它,这将属于让我畏缩的类别。这不是用于填充列表框,而是用于将列表框的值发布到控制器。他说他想用javascript手动填充列表框,这就是为什么我在这里保留select标记的原因。理想情况下,您可以传入一个类型化模型,然后使用@Html.ListBoxFor(x=>x…)填充并绑定listbox,其中您在模型中有一个IEnumerable来保存listbox值。我仍然认为这是一种黑客行为。我会改为使用隐藏字段来存储字段,或者使用Ajax来发布