3

私は次のコードを持っています -

意見-

<% Html.BeginForm(); %>
    <div>
<%= Html.DropDownList("DropDownSelectList", new SelectList( Model.DropDownSelectList, "Value", "Text"))%>

コントローラ-

public ActionResult Admin(string apiKey, string userId)
{
    ChallengesAdminViewModel vm = new ChallengesAdminViewModel();
    vm.ApiKey = apiKey;
    vm.UserId = userId;
    vm.DropDownSelectList = new List<SelectListItem>();
    vm.DropDownSelectList.Add(listItem1);
    vm.DropDownSelectList.Add(listItem2);
    vm.DropDownSelectList.Add(listItem3);
    vm.DropDownSelectList.Add(listItem4);
    vm.DropDownSelectList.Add(listItem5);
    vm.DropDownSelectList.Add(listItem6);
    vm.DropDownSelectList.Add(listItem7);
}

[HttpPost]
public ActionResult Admin(ChallengesAdminViewModel vm)
{
    if (ModelState.IsValid)//Due to the null dropdownlist  gives model state invalid
    {
    }
}

ViewModel-

public class ChallengesAdminViewModel
{
    [Required]
    public string ApiKey { get; set; }

    [Required]
    public string UserId { get; set; }

    public List<SelectListItem> DropDownSelectList { get; set; }  
}

必須ではないのに、なぜリストが必要なのかわかりません。必要に応じて 2 つの属性のみを持ちたい。そのため、そのリストが不要であることを宣言または変更し、モデルの状態を有効にする方法を知りたいと思いました。

4

3 に答える 3

6

私が行う方法は、ドロップダウンがバインドされる (null 可能である) ビュー モデルにプロパティを持ち、ドロップダウンのすべてのオプションを含む別のプロパティを持つことです。

ViewModel プロパティ

public int? CountryId { get; set; }
public IEnumerable<SelectListItem> CountryOptions { get; set; }

意見

<label for="CountryId">Country:</label>
<%: Html.DropDownListFor(x => x.CountryId, Model.CountryOptions, "N/A")%>

注:"N/A"文字列はデフォルトの空の値です。

HTH、
チャールズ

Ps。もちろん、これはASP.NET MVC 2を使用しています

于 2010-05-12T22:40:53.147 に答える
0

""単一の値( )を強制SelectListItemしてリストに入れることができないため、失敗していると思います。選択できる値は1つだけですDropDownSelectList

ChallengesAdminViewModel.DropDownSelectList代わりに、文字列型を作成してみてください。次に、選択したオプションの値になります。SelectListItems投稿された結果を解析するのではなく、オプションをビューにプッシュするために作成されています。

于 2010-05-12T21:39:15.993 に答える
0

簡単な答えは、モデルからそれを削除し、代わりにViewDataを介して渡すことです。次に、モデルには、リストから選択された値のメンバーが含まれます。

于 2010-05-12T21:01:49.623 に答える