0

クレイジーな薬を飲んでいるような気がします。私たちのデータベースから私たちが持っているすべてのワイン生産者を読み取るビューのドロップダウンリストがあります。selectedValueを参照ページによって駆動される特定のIDに設定したいと思います。デバッグでselectedValueを取得し、選択された値が入力されていることを確認できます(この例では906)が、ページがレンダリングされるときにドロップダウンリストが正しい値に設定されません。デフォルトでは常にデフォルトで1になります。価値。コントローラではなくかみそりでselectListを作成しようとしましたが、何も機能しません。これについての助けをいただければ幸いです、私はそれが何か小さなものだと思います。

コントローラ:

        if (User.IsInRole("admin"))
        {
            if (ID != 0)
            {
                ViewBag.ProducerSelect = new SelectList(db.Producers.OrderBy(p => p.Name), "ProducerID", "Name", ID);
            }
            else
            {
                ViewBag.ProducerSelect = new SelectList(db.Producers.OrderBy(p => p.Name), "ProducerID", "Name");
            }
        }

意見:

if (User.IsInRole("producereditor"))
{
    <h3>@ViewBag.ProducerName</h3>
}
    else
{
<div class="editor-label">
    @Html.LabelFor(m => m.Wine.ProducerID, "Producer")
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.Wine.ProducerID, ViewBag.ProducerSelect as SelectList)
</div>
}

以下を試しましたが、成功しませんでした。

         ViewBag.ProducerSelect = new SelectList(from p in db.Producers
                                                    orderby p.Name
                                                    select new { p.ProducerID, p.Name }
                                                    , "ProducerID", "Name", ID);
4

3 に答える 3

0

ViewModel ex WineViewModel を使用する

public class WineViewModel
    {

        public Wine Wine { get; set; }

        public SelectList PProducerList { get; set; }

        public WineViewModel() { }

        public WineViewModel(Wine wine) 
        {
            this.Wine = wine;          

        }
    }

コントローラーで次のことを試してください var model = new WineViewModel( selectwine);

    model.ProjectTypeList = new SelectList( from p in db.Producers
                                            orderby p.Name
                                           select new { p.ID, p.Name }, "ID", "Name")

SelectList でどちらが ID で、どちらが値であるかを排他的に宣言していることに注意してください。

次に、あなたの見解で

     @Html.DropDownListFor(model => model.Wine.ProducerID, Model.ProjectTypeList)
于 2012-08-13T15:25:11.347 に答える
0

項目を事前に選択する場合は、その値を ProducerId プロパティに設定します。

var yourViewModelObj=new YourViewModel;
yourViewModelObj.Wine.ProducerId=906; //or whatever value you want
return View(yourViewModelObj);

提案: コードの読みやすさ/メンテナンスを向上させるために、ViewBag / ViewData を避け、ViewModel を使用してデータを渡すようにしてください。

ビューモデルにプロパティを追加して、プロデューサーのコレクションを保持します

public class WineViewModel
{
   //Other Existing properties also
   public IEnumerable<SelectListItem> Producers{ get; set; }
   public string SelectedProducer { get; set; }
}

次に、 GetAction メソッドで、次のように値を設定できます。1 つの選択オプションをデフォルトの選択オプションとして設定する場合。

public ActionResult CreateWine()
{
  var vm=new WineViewModel();
  //The below code is hardcoded for demo. you mat replace with DB data.
  vm.Producers= new[]
  {
    new SelectListItem { Value = "1", Text = "Prodcer A" },
    new SelectListItem { Value = "2", Text = "Prodcer B" },
    new SelectListItem { Value = "3", Text = "Prodcer C" }
  };      
  //Now let's set the default one's value
  vm.SelectedProducer = "2";  

  return View(vm);    
}

そして、強く型付けされたビューでは、

@Html.DropDownListFor(x => x.SelectedProducer, 
     new SelectList(Model.Producers, "Value", "Text"), "Select Producer")

上記のコードによって生成された HTML マークアップには、値 2 のオプションをselected1 つとして HTML 選択が含まれます。

于 2012-08-13T15:31:00.550 に答える
0

私はこれを理解しました。ページのどこかの非表示フィールドに ViewModel.wine.ProducerID があり、デフォルトで 1 になっているので、渡された値にそれを割り当てただけで、うまくいきました。私はそれがそのようなものであることを知っていました。ありがとう!

于 2012-08-13T15:40:52.960 に答える