私はMVCアプリを開発しています。
viewbag を使用してコントローラーからビューに値を渡します。ビューでは、ビューバッグからのデータにいくつかの変更を加えます。変更が完了したら、その変更されたデータをコントローラーに送り返したいと思います。
だから私はクエリを持っています.ViewのViewBag要素に値を割り当てることができますか?これらの値はコントローラで使用できますか?
(データは、コントローラー -> ビュー -> コントローラーから移動します)
私はMVCアプリを開発しています。
viewbag を使用してコントローラーからビューに値を渡します。ビューでは、ビューバッグからのデータにいくつかの変更を加えます。変更が完了したら、その変更されたデータをコントローラーに送り返したいと思います。
だから私はクエリを持っています.ViewのViewBag要素に値を割り当てることができますか?これらの値はコントローラで使用できますか?
(データは、コントローラー -> ビュー -> コントローラーから移動します)
そのようなことを行うには、本当にモデルを使用する必要があります。それが目的の 1 つです。さらに、それはベストプラクティスです。
このことを考慮:
public class MyModel
{
public string Value { get; set; }
}
次に、あなたのHttpGet
行動は次のとおりです。
[HttpGet]
public MyAction()
{
MyModel model = new MyModel();
return View(model);
}
次に、あなたの見解で:
@model MyModel
@using(Html.BeginForm())
{
@Html.LabelFor(m => m.Value)
@Html.EditorFor(m => m.Value)
<input type="submit" value="Save" />
}
次に、あなたのHttpPost
行動は次のようになります。
[HttpPost]
public ActionResult MyAction(MyModel model)
{
//model.Value is the value you typed in
}
編集:コメントで提案されているように、ドロップダウンリストの値に対してそれを行う方法は次のとおりです:
このモデルを考えると:
public class MyModel
{
public int SelectedId { get; set; }
public List<SelectListItem> Selections { get; set; }
}
好きなように入力できますHttpGet
:
[HttpGet]
public MyAction()
{
MyModel model = new MyModel();
model.Selections = db.Values //replace with your db table
.Select(v => new SelectListItem
{
Text = v.Name //value to go in your text field
Value = v.Id.ToString() //value to go in your ID field
})
.ToList();
return View(model);
}
次に、ビューで次のことができます。
@model MyModel
@using(Html.BeginForm())
{
@Html.LabelFor(m => m.SelectedId)
@Html.DropDownListFor(m => m.SelectedId, Model.Selections)
<input type="submit" value="Save" />
}
次に、ここにあなたのHttpPost
:
[HttpPost]
public ActionResult MyAction(MyModel model)
{
//model.SelectedId is the value you selected
}
それは実際には が設計されているものではありません-それはすべて実際には名前にあり、コントローラーからビューに情報を渡すために使用されるビュー固有のViewBag
データのみを含める必要があります(その逆ではありません)。
ビューからコントローラに情報を渡す好ましい方法はPOST
、特定のアクションへのリクエストを介することです。