Razor を使用している場合、フィールドに直接アクセスすることはできませんが、その値を管理することはできます。
Microsoft の最初のアプローチは、開発者を Web 開発から遠ざけ、(たとえば) デスクトップ プログラマーが Web アプリケーションを簡単に作成できるようにするという考えです。
一方、Web 開発者は、ASP.NET のこのトリッキーで奇妙な方法を理解していませんでした。
実際には、この非表示の入力はクライアント側でレンダリングされ、ASP はそれにアクセスできません (アクセスしたことはありません)。しかし、やがてそれが海賊行為であることがわかり、慣れてきたらそれに頼ることができるようになります。Web 開発は、デスクトップやモバイルとは異なります。
モデルは論理単位であり、非表示フィールド (およびビュー ページ全体) はデータの代表的なビューにすぎません。そのため、アプリケーションまたはドメイン ロジックに作業を専念させることができ、ビューはそれを消費者に提供するだけです。つまり、ビューでの詳細なアクセスや「ブレインストーミング」機能は必要ありません。
コントローラーは、非表示または一般的なセットアップを管理するために必要な機能を実際に実行します。モデルは特定の論理ユニットのプロパティと機能を提供し、ビューはそれをエンド ユーザーにレンダリングするだけです。MVCの詳細をお読みください。
モデル
public class MyClassModel
{
public int Id { get; set; }
public string Name { get; set; }
public string MyPropertyForHidden { get; set; }
}
これはコントローラーアクションです
public ActionResult MyPageView()
{
MyClassModel model = new MyClassModel(); // Single entity, strongly-typed
// IList model = new List<MyClassModel>(); // or List, strongly-typed
// ViewBag.MyHiddenInputValue = "Something to pass"; // ...or using ViewBag
return View(model);
}
ビューは以下です
//This will make a Model property of the View to be of MyClassModel
@model MyNamespace.Models.MyClassModel // strongly-typed view
// @model IList<MyNamespace.Models.MyClassModel> // list, strongly-typed view
// ... Some Other Code ...
@using(Html.BeginForm()) // Creates <form>
{
// Renders hidden field for your model property (strongly-typed)
// The field rendered to server your model property (Address, Phone, etc.)
Html.HiddenFor(model => Model.MyPropertyForHidden);
// For list you may use foreach on Model
// foreach(var item in Model) or foreach(MyClassModel item in Model)
}
// ... Some Other Code ...
ViewBag を使用したビュー:
// ... Some Other Code ...
@using(Html.BeginForm()) // Creates <form>
{
Html.Hidden(
"HiddenName",
ViewBag.MyHiddenInputValue,
new { @class = "hiddencss", maxlength = 255 /*, etc... */ }
);
}
// ... Some Other Code ...
Html Helper を使用して Hidden フィールドをレンダリングするか、手動で記述することもできます<input name=".." id=".." value="ViewBag.MyHiddenInputValue">
。
ViewBag は、ビューに対するある種のデータ キャリアです。モデルに制限はありません。好きなものを配置できます。