0

まず、MVC2.0を使用しています。コントローラへのポストバックにある複数選択リストボックスで選択を取得するのに問題があります。これが私のコードです:

モデル

public class TestModel
{
    public MultiSelectList AvailableTestTypes { get; set; }
    public List<TestType> SelectedTestTypes { get; set; } 
}

public class TestType
{
   public long Id { get; set; }
   public string Name { get; set; }
   public bool isActive { get; set; }
}

コントローラ

public ActionResult Index(TestModel model)
{
    if (model == null) model = new TestModel();

    List<TestType> testList = new List<TestType>()
    {
        new TestType() { Id = 1, Name = "TESTING", isActive = true },
        new TestType() { Id = 2, Name = "TESTING2", isActive = true },
        new TestType() { Id = 3, Name = "TESTING3", isActive = true }
    };

    model.AvailableTestTypes = testList; //TODO: Fetch From Repository 
    return View(model);
}


[HttpPost]
public ActionResult PostForm(TestModel model)
{
    List<long> act = model.SelectedTestTypes != null ? model.SelectedTestTypes.Select(x => x.Id).ToList() : new List<long>();

意見

 <%= Model != null && Model.AvailableTestTypes != null ?
                                    Html.ListBoxFor(x => x.SelectedTestTypes,
                                                             new MultiSelectList(Model.AvailableTestTypes, "Id", "Name", Model.SelectedTestTypes), 
                                                             new { @id = "testListboxId", @class = "blah", @title = "title" }) : null%>

コントローラーへの投稿後、選択したリストの数は、いくつ選択しても0になります...ここで何が間違っているのですか?

ListBoxForで値を選択するチャレンジなど、いくつかの異なるソリューションを試し まし たが、何も機能しませんでした:(

4

1 に答える 1

1

スクリプトと他のスクリプトの例の違いは、int[]ではなくリストにバインドしようとしているという事実です。

複数選択リストボックスにデータを入力する場合は、DataValueFieldとDataTextfieldを設定する必要があります。設定しない場合、値は設定されません。

model.AvailableTestTypes = new MultiSelectList(testList, "Id", "Name);

次に、このクラスを使用してみてください。

public class TestModel
{
    public MultiSelectList AvailableTestTypes { get; set; }
    public int[] SelectedTestTypes { get; set; } 
}

PostFormアクションでは、IDを使用してTestTypesを取得できます。

于 2012-11-27T22:46:23.053 に答える