3

ビューに渡されるモデルの一部ではない状態を保持して、選択リストを作成する必要があります。ViewBagを使用してリストをビューに渡す必要があると思いますか?実装と選択リストの状態を保持する方法(選択した値をアクションに戻し、ビューに再度渡す方法(これを行うための可能な方法))に関するアドバイスはありますか?

現在のアクション:

public ActionResult Images(string x, string y)
{
//some code 

ContentPage cp = this.ContentPage;

return View(cp);
} 

//Post to action with same name:
[HttpPost]
public ActionResult Images(string someParameter)
 {

    ContentPage cp = this.ContentPage;

    return View(cp);
 }

現在のビュー:

@model ContentPage
@{
ViewBag.Title = "Images";
CmsBaseController controller = (this.ViewContext.Controller as CmsBaseController);
}
@using (Html.BeginForm())
{ 
<div>

//This should go to List<SelectListItem> as I understand
<select name="perpage" id="perpage" onchange='submit();'>
           <option value="1">1</option>
           <option value="2">2</option>
           <option value="3">3</option>

</select>
</div>
}

ありがとうございました!!!

4

1 に答える 1

11

このSOの質問をご覧になりましたか?そこでの答えは、ViewBag/ViewDataを使用してそのリストを渡す場合にうまくいくように見えます。

そうは言っても、クイックビューモデルを作成してそこに保存してみませんか?それは本当に簡単な方法です。

ContentPageモデルが何であるかはわかりませんが、ページに必要なもの(選択リストの値を含む)を含むContentPageViewModelを作成することはできます。


例:

たとえば、ビューモデルに選択範囲を保持するプロパティと、可能な値の列挙を保持するプロパティを設定するのは簡単です。このようなもの:

public class MyViewModel
{
   ...

   public int SelectedId { get; set; }

   ...

   public IEnumerable<Choice> Choices { get; set; }
}

ここで、Choiceは、私の例では、2つのプロパティを持つクラスです。1つは識別子を保持し、もう1つは表示するテキストを保持します。このようなもの:

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

そして、おそらく、DropDownListFor表示/選択作業を処理するを持っている可能性があります。このようなもの:

@model MyViewModel

@Html.DropDownListFor(model => model.SelectedId, new SelectList(Model.Choices, "Id", "Text"), "Choose... ")

コントローラのアクションに戻ると、ビューモデルSelectedIdには、選択したビューのドロップダウンに対応するIDが入力されます。

于 2011-08-26T18:29:18.193 に答える