Ajax.ActionLinkヘルパーを使用していて、コントローラーアクションにいくつかのパラメーターを渡す必要がある場合、モデルにバインドされていないTextAreaの値を取得するにはどうすればよいですか?
たとえば、ユーザーがテキストエリアに入力し、[保存]をクリックして、テキストエリアの値をコントローラーアクションに送信してさらに処理するようにします。
ViewBagを使用しますか?もしそうなら、どうすればDOM要素の値をViewBagに割り当てることができますか?
Ajax.ActionLinkヘルパーを使用していて、コントローラーアクションにいくつかのパラメーターを渡す必要がある場合、モデルにバインドされていないTextAreaの値を取得するにはどうすればよいですか?
たとえば、ユーザーがテキストエリアに入力し、[保存]をクリックして、テキストエリアの値をコントローラーアクションに送信してさらに処理するようにします。
ViewBagを使用しますか?もしそうなら、どうすればDOM要素の値をViewBagに割り当てることができますか?
私は以前にこの問題をいじったことがありますが、を使用して回避できますAjax.BeginForm
。
次の例を見てください。
Person
Nameの1つの文字列プロパティを持つモデルがあります。
意見
@model Application.Models.Person
<fieldset>
<legend>Form</legend>
@using (Ajax.BeginForm("SendUp", "Home", new AjaxOptions
{
HttpMethod = "POST",
OnComplete = "window.location.href = 'Index'"
}))
{
<p>
@Html.LabelFor(model => model.Name)
@Html.EditorFor(model => model.Name)
</p>
<p>
@Html.TextArea("ta")
</p>
<p>
<input type="submit" value="Submit" />
</p>
}
</fieldset>
コントローラ
[HttpPost]
public ActionResult SendUp(string Name, string ta)
{
string s = ta;
// Process stuff here
// Go to another action or whatever
return RedirectToAction("Index");
}
を使用すると、ページ上のモデルにバインドされていない場合でもAjax.BeginForm()
、データをコントローラーに送信できます。Html要素のプロパティが、コントローラーが必要とするパラメーターと同じ名前であることを確認する必要があります。name
だからあなたがのコントローラーメソッドを持っているなら
public ActionResult SendUp(string Name, string ta)
Name
の名前とta
内部のHtml要素が必要になりAjax.BeginForm()
ます。
これを行うには、要素全体を書き出すことができます。
<input type="text" id="Name" name="Name" />
@Html
または、ヘルパーを使用できます。
@Html.Editor("Name")
@Htmlヘルパーの名前を指定すると、その値がプロパティとして設定され、id
プロパティにも設定さname
れます。
ViewBagはサーバー側の概念です。ページがレンダリングされると、存在しなくなります。ページ上のフィールドをアクションパラメーターと宣言的にリンクする方法はありません。
やりたいことを行うには、次の2つのオプションがあります。-Ajax.ActionLinkヘルパーを削除し、Javascriptを記述します(申し訳ありませんが、実際にはサポートできません)-代わりにAjax.BeginFormを使用して、関連するフィールドをフォームに入力します、送信ボタンをクリックすると、フォームがajaxを介してアクションに送信されます。