将ListBoxFor(Multiple)绑定回Model

时间:2012-05-04 15:47:27

标签: c# asp.net asp.net-mvc asp.net-mvc-3 model-binding

我有一个MVC视图,使用下面的Razor语法呈现基本等同于KeyValuePair的内容,然后生成以下HTML。

@Html.DropDownListFor(x => x.SelectedItems, new SelectList(Model.SelectedItems, "Key", "Key"), new { Class = "selectList selectedList", size = "2" })

HTML:

<select class="selectList selectedList" id="SelectedItems" name="SelectedItems" size="2">
   <option value="842">Item 1</option>
   <option value="326">Item 2</option>
   <option value="327">Item 3</option>
</select>

我使用Jquery和泛型函数手动发布表单来POST表单,如下所示:

function GenericSubmit(formSelector, sender, callback) {
    if (typeof (sender) != "undefined" && $(sender).hasClass('disabled')) {
        return false;
    }

    var $that = $(formSelector);
    var that = $that.get(0);
    if ($that.valid()) {
        $.ajax({
            url: that.action,
            type: that.method,
            data: $(that).serialize(),
            success: function (data, textStatus, jqXHR) {
                callback.call(that, data);
            }
        });
    }
    return false;
}

然而,我遇到的问题是,只有正在发送的数据是实际值(我希望这是JQ的工作原理..),但我需要绑定到IEnumerable。

从查看发送到表单的POST数据,我只能看到发送的以下值 - 我希望我的模型有一个空集合。

SelectedItems:842
SelectedItems:326
SelectedItems:327

我的模型如下:

/// <summary>
/// An response for dealing with list type entities
/// </summary>
public class ListEntityResponse : EntityScreenResponse
{
    /// <summary>
    /// Contains a Enumerable of items that can be selected
    /// </summary>
    public List<KeyValueViewModel> AvailableItems { get; set; }

    /// <summary>
    /// Contains a Enumerable of items that have been selected
    /// </summary>
    public List<KeyValueViewModel> SelectedItems { get; set; }

    public ListEntityResponse()
    {
        AvailableItems = new List<KeyValueViewModel>();

        SelectedItems = new List<KeyValueViewModel>();
    }


}

为了更加清晰 - 这是我的KeyValueViewModel:

 public class KeyValueViewModel
    {
        public string Key { get; set; }

        public string Value { get; set; }
    }

Current Results

我为此搜索过高低,但似乎无法找到有效的主题,任何帮助都会受到赞赏!

谢谢,

1 个答案:

答案 0 :(得分:0)

//刚刚意识到我误解了你的问题。

如果你想要绑定多个值,你需要使用ListBoxFor

//

那么为什么你需要控制器从视图中接收所有这些信息,如果它可能已经在你的后端有了什么?

只关心你在表单中提交的内容才有意义。

如果您需要重新填充此数据以再次呈现视图(因为存在验证错误,这是一种优雅的方法)

http://www.paulstovell.com/clean-aspnet-mvc-controllers