データを含むオブジェクト ビューとそのビューのボタンがあります。ユーザーはオブジェクト情報を確認し、ボタンをクリックして新しいビュー フォームに移動し、情報を入力してアイテムを作成できます。私の課題はこれです。前のビューにオブジェクトの ID を関連付けて、作成および送信する情報に関連付けるにはどうすればよいですか?
2 に答える
@Html.ActionLink("Add","AddNotes","Object",new {@id=5},null)
これにより、 querystring を持つタグが作成されます?id=5
。(ハードコーディングされた 5 をビューの動的な値に置き換えることができます)
ViewModel/Model
この値を作成フォーム用に保持するプロパティがあります。
public class CreateNoteViewModel
{
public int ParentId { set;get;}
public string Note { set;get;}
//Other properties also
}
2 番目のビューを作成する GETaction
メソッドでこれを読み取り、ViewModel/Model のそのプロパティの値を設定します。
public ActionResult AddNotes(int id)
{
var model=new CreateNoteViewModel();
model.ParentId=id;
return View(model);
}
そして、強く型付けされたビューで、この値を隠し変数内に保持します。
@model CreateNoteViewModel
@using(Html.BeginForm())
{
@Html.TextBoxFor(Model.Note)
@Html.HiddenFor(Model.ParentId)
<input type="submit" />
}
HttpPost
アクションで、POSTED モデルの ParentId プロパティからオブジェクト ID を取得できます。
[HttpPost]
public ActionResult AddNotes(CreateNoteViewModel model)
{
if(ModelState.IsValid()
{
//check for model.ParentId here
// Save and redirect
}
return View(model);
}
非表示の入力とビューデータ、PSEUDOCODE を使用できます。 注:ビュー データで文字列を使用し、コントローラーで ID に戻す必要がある場合があります。ViewData/ViewBag (および短所) の基本的な説明については、このリンクを参照してください。
最初のアクション (コントローラー) からデータをビューに渡す必要があります。コントローラーの基本クラスには、ビューに渡すデータを入力するために使用できる "ViewData" ディクショナリ プロパティがあります。キーと値のパターンを使用して、ViewData ディクショナリにオブジェクトを追加します。
コントローラ
public ActionResult yourfirstaction()
{
//assign and pass the key/value to the view using viewdata
ViewData["somethingid"] = ActualPropertyId;
ビュー内 - 次のビューをレンダリングするために次のコントローラに戻すために非表示の入力で使用する値を取得します
<input type="hidden" name="somethingid" value='@ViewData["somethingid"]' id="somethingid" />
コントローラ
public ActionResult yournextaction(string somethingid)
{
//use the id
int ActualPropertyId = Convert.ToInt32(somethingid);