非表示の変数の値がjavascriptで設定されている場合、コントローラーのActionResultの非表示の変数の値にアクセスできますか?
2 に答える
コントローラーにデータを投稿すると、フォームのコンテンツ全体 (隠しフィールドを含む) を投稿できます。非表示フィールドの目的は、データがサーバーに送信されるときではなく、クライアントで非表示にすることです。フォーム データは POST にパッケージ化され、入力方法に関係なくサーバーに送信されるため、JQuery を使用してフィールドに問題なく入力できます...
このフォームを考えると:
<% Html.BeginForm(); %>
<input type="hidden" id="catID" name="catID" />
<% Html.EndForm(); %>
これをルート パラメータとして処理できます。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(string catID)
{
// Do stuff here...
}
または、 FormCollection インスタンスのアイテムとして:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(FormCollection form)
{
string catID = form["catID"];
// Do stuff here...
}
または、入力モデルとしても:
public class MyInputModel
{
public string catID;
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(MyInputModel input)
{
string catID = input.catID;
// Do stuff here...
}
ASP.NET MVC について言及していて、言及している隠し変数が実際にはコントローラーにポストされるフォームの隠しフィールドである場合、答えは「はい」です。
これは、私が作成するアプリでよくあるパターンです。たとえば、人物の詳細を編集しているとします。入力するフォームには、名前、年齢などの可視フィールドが含まれますが、詳細を編集している人物の ID を保持する隠しフィールドも必要です。
これが使用しているシナリオの種類である場合、名前と年齢のフィールドと同じ方法で隠しフィールドをコントローラーで使用できます。
編集:その後のコメントに加えて、javascript 変数を参照しているようです。この場合、これらはコントローラーで直接使用できませんが、変数をフォームに挿入することでこれを調整することができます。
//Javaacript
var myVariable = calculateSomeValue();
$("#myFormField").val(myVariable);
...
//HTML
<form action="..." method="post">
<input type="hidden" name="myFormField" id="myFormField"/>
...
</form>
...
//Controller code
ActionResult MyControllerAction(string myFormField, ...){
DoSomethingWith(myFormField);
}
これで問題が解決しない場合は、サンプル コードを投稿できますか?