私はMVC 3で2つのドロップダウンリストを必要とするビューを作成しようとしています。私の唯一の他のMVCアプリケーションでは、Ajaxメソッドを使ってデータを取り込むTelerikコントロールを使用しました。今はこのプロジェクトではサードパーティ製のコントロールを使用しないため、MVC SelectList
をドロップダウンに使用します。私はSelectList
のデータを取り込む方法について多くの記事を読んできましたが、それらのどれも同じことを二度は言わず、モデルを作成するためには常に別の方法があります。ViewData
またはViewBag
を使用してコレクションを保持し、 ..一貫性がない。MVCのリストをモデルでポストバックで選択する方法は?
ViewData
ではなく、モデル自体をデータに使用するMVCビューでドロップダウンを設定するには、最も受け入れられる方法は何ですか?ユーザーがリストから選択してサブミットし、HttpPost
アクションが呼び出されると、selectリストプロパティのModelプロパティから選択した値にアクセスするにはどうすればよいですか?
これは私の現在のモデルである:
public class TemporaryRegistration {
[Required]
[Email(ErrorMessage = "Please enter a valid email address.")]
[Display(Name = "Email address")]
public string Email { get; set; }
[Required]
[Integer]
[Min(1, ErrorMessage = "Please select an entity type.")]
[Display(Name = "Entity Type")]
public IEnumerable<SelectListItem> EntityType { get; set; }
[Required]
[Integer]
[Min(1, ErrorMessage = "Please select an associated entity.")]
[Display(Name = "Associated Entity")]
public IEnumerable<SelectListItem> AssociatedEntity { get; set; }
}
これは私の現在のビューである私は、ドロップダウンを使用する必要がある場合には、それだけで私はドロップダウンにそれらを回すか、どのようにTextBoxFor
を使用していますか?
@model Web.Models.TemporaryRegistration
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Create New ELM Select User</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.EntityType)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.EntityType)
@Html.ValidationMessageFor(model => model.EntityType)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.AssociatedEntity)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AssociatedEntity)
@Html.ValidationMessageFor(model => model.AssociatedEntity)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
これが私の現在のポストのアクションです: はどのようにして、選択した値を得るのですか?
[HttpPost]
public ActionResult CreateUser(TemporaryRegistration registrationModel) {
string newRegistrationGUID = string.Empty;
if (!ModelState.IsValid) {
return View();
}
TemporaryRegistrationEntity temporaryRegistration = null;
temporaryRegistration = new TemporaryRegistrationEntity(registrationModel.Email, registrationModel.EntityType, registrationModel.AssociatedEntity);
newRegistrationGUID = temporaryRegistration.Save();
return Content("New registration was created with GUID " + newRegistrationGUID);
}
明確化のおかげで、それはまさに私が使っているアーキテクチャのタイプです。要件は実際には、PostModelから変換されたBusiness EntityモデルであるViewModelと、軽量ネットワークトラフィック用のDTOの3つのモデルを使用しています。 –
@ one.beat.consumer私はこれが元の投稿とどのように異なるのか見当たりません。元の投稿のビューモデルは 'TemporaryRegistration'で、エンティティ/パーシスタンスモデルは' TemporaryRegistrationEntity'です。この回答の原文との唯一の違いは、メタデータを除外し、私が使用していたカテゴリを含む**正確な**同じパターンを使用していることです。これは質問の内容でした... –
ありがとう、あなたは一緒に私が全体像を見るのを助け、私はそれを正しい方法でやっているように見えます。 TemporaryRegistrationEnitityは本当に私のビジネスモデルですが、TemporaryRegistrationは単なるビューモデルです。わかりやすくするため、TemporaryRegistrationViewModelに名前を変更します。 –