我想創建一個需要2個下拉列表與MVC 3的視圖。在我唯一的其他MVC應用程序中,我們使用了使用Ajax方法填充數據的Telerik控件。現在在這個項目中,我們不使用第三方控件,所以我將使用MVC SelectList
作爲下拉菜單。我一直在閱讀大量關於如何填充SelectList
的文章,但他們都沒有兩次說過同樣的事情,總是用不同的方式來創建模型,有些使用ViewData
或來保存集合並傳遞到視圖等沒有一致性。MVC在回發中選擇與模型列表,如何?
在MVC視圖中使用模型本身作爲數據填充下拉的最佳方法是什麼,而不是ViewData
。當用戶從列表中進行選擇時,提交併調用HttpPost
操作,如何從選擇列表屬性的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);
}
感謝您的澄清,這正是我使用的架構類型。要求實際上讓我使用3種不同的模型:ViewModel,一種業務實體模型,它是在後期從ViewModel轉換而來的,DTO是用於輕量級網絡流量。 – 2012-01-06 14:22:01
@ one.beat.consumer我沒有看到這與原始文章有什麼不同。原始文章中的視圖模型是「TemporaryRegistration」,實體/持久性模型是「TemporaryRegistrationEntity」。在這個答案的唯一區別就是你的遺漏了元數據,並使用**完全相同的模式,包括我曾經使用的類別,這就是問題所在...... – 2012-01-06 14:39:52
謝謝,兩者都是你們在一起幫助我看到了整個畫面,看起來我正以正確的方式進行。 TemporaryRegistrationEnitity確實是我的商業模式,而TemporaryRegistration只是視圖模型。爲了清晰起見,我將它重命名爲TemporaryRegistrationViewModel。 – 2012-01-06 14:45:32