0

ハードコードされた文字列値をビューにドロップダウンリストとして使用し、データベースから選択した値を渡します。ここで、0 =保留中、1 =完了、3 =待機中、以下はビューとコントローラのコードです:DropdownListForがエラーをスローする

var paymentStatus = new[] { "Pending", "Complete", "AwaitingPayment" }; 
    ViewData["StatusID"] = new SelectList(paymentStatus, "Value", "Text", booking.StatusID); 


    <tr><td>Status</td><td><%: Html.DropDownListFor(m => m.StatusID, ViewData["StatusID"] as SelectList)%></td></tr> 

エラー: が発生します。DataBinding: 'System.String'に 'Value'という名前のプロパティが含まれていません。

答えて

4

あなたの例の問題点は、SelectListに文字列の配列を渡した後、(文字列はありません)ValueTextプロパティを使用するSelectListのを言っているということです。このデータのリポジトリを作成し、いっその

public class Status { 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

var statusTypes = new List<Status> { 
    new Status { Id = 1, Text = "Pending" }, 
    new Status { Id = 2, Text = "Complete" }, 
    new Status { Id = 3, Text = "AwaitingPayment" } 
}; 

:あなたは、おそらく、このためのクラスを作成する必要があります

var statusTypes = statusRepository.GetStatusTypes(); 

はあなたのSelectListのにこれを渡します。

SelectList statusList = new SelectList(statusTypes, "Id", "Text", booking.StatusID); 

// return this in a ViewModel or use ViewData like you are now: 
ViewData["Status"] = statusList; 

return View(statusList); 
1

エラーはそれがファイン「バリュー」にできない示し、あなたはbookin.Statusは、予約の任意のテキストプロパティになります

new SelectList(paymentStatus, booking.Status, "Text", booking.StatusID) 

ような何かをしなければなりません。

var paymentStatuses = new[] 
{ 
    new SelectListItem { Value = "0", Text = "Pending" }, 
    new SelectListItem { Value = "1", Text = "Complete" }, 
    new SelectListItem { Value = "3", Text = "AwaitingPayment" }, 
}; 
var model = new SomeViewModel 
{ 
    StatusID = booking.StatusID, 
    Statuses = new SelectList(paymentStatuses, "Value", "Text") 
} 
return View(model); 

、その後:

<tr> 
    <td> 
     Status 
    </td> 
    <td> 
     <%= Html.DropDownListFor(m => m.StatusID, Model.Statuses) %> 
    </td> 
</tr> 

か、このViewDataを主張する場合には(私は特にあなたのように、それをお勧めしません。このヘルプは、ビューモデルを使用してください

3

願っています既にビューモデルがあります):

var paymentStatuses = new[] 
{ 
    new SelectListItem { Value = "0", Text = "Pending" }, 
    new SelectListItem { Value = "1", Text = "Complete" }, 
    new SelectListItem { Value = "3", Text = "AwaitingPayment" }, 
}; 
ViewData["Statuses"] = new SelectList(paymentStatuses, "Value", "Text"); 
var model = new SomeViewModel 
{ 
    StatusID = booking.StatusID 
} 
return View(model); 

ビューで:

<tr> 
    <td> 
     Status 
    </td> 
    <td> 
     <%= Html.DropDownListFor(m => m.StatusID, ViewData["Statuses"] as SelectList) %> 
    </td> 
</tr> 
関連する問題