我目前正在使用我的第一個MVC3應用程序(使用Razor視圖引擎),並決定使用開源的Telerik Q1 2012控件,因爲它們將提供我需要的許多功能(並且看起來不錯)。現在我遇到的問題是使用Telerik Editor控件並綁定到我的視圖模型。我在頁面上具有標準的Html.EditorFor()控件,該控件正確返回ViewModel中的值,但綁定到Telerik Editor的屬性爲null。他們的文檔完全沒用(它只提到了Editor的一次),而且他們似乎也沒有在論壇上回答太多問題。我的主要問題是,我如何將Telerik MVC3編輯器綁定到模型,並讓它設置綁定到它的屬性?我的視圖模型的代碼如下(感謝您提供的任何幫助,請記住,我是MVC的全新人物,我自己在做這個項目以熟悉它,並將一些新技術引入該組):Telerik MVC 3(Razor)2012年第一季度編輯EditorFor()綁定返回空值和不顯眼驗證不起作用
public class SupportViewModel
{
[Display(Name = "Ticket Subject")]
[MaxLength(30)]
[Required(ErrorMessage = "The ticket subject is required.")]
public string TicketSubject { get; set; }
[Display(Name = "Support Issue")]
[Min(1, ErrorMessage = "You must select a support issue.")]
public int SupportIssueID { get; set; }
[Display(Name = "Ticket Priority")]
[Min(1, ErrorMessage = "You must select a ticket priority.")]
public int TicketPriorityID { get; set; }
//public string EmployeeID { get; set; }
public bool IsClosed { get; set; }
[Required(ErrorMessage = "The detail message is required.")]
public string DetailMessage { get; set; }
}
查看代碼:
@model RadixMVC.ViewModels.SupportViewModel
@{
ViewBag.Title = "Create New Support Ticket";
}
<h2>Radix Support: Create New Support Ticket</h2>
<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 style="width: 500px">
<legend>Create New Support Ticket</legend>
<div class="editor-label">
@Html.LabelFor(model => model.TicketSubject)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TicketSubject)
@Html.ValidationMessageFor(model => model.TicketSubject)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.SupportIssueID)
</div>
<div class="editor-field">
@Html.DropDownList("SupportIssueID", string.Empty)
@Html.ValidationMessageFor(model => model.SupportIssueID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.TicketPriorityID)
</div>
<div class="editor-field">
@Html.DropDownList("TicketPriorityID", string.Empty)
@Html.ValidationMessageFor(model => model.TicketPriorityID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.IsClosed)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IsClosed)
@Html.ValidationMessageFor(model => model.IsClosed)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DetailMessage)
</div>
<div class="editor-field">
@*@Html.EditorFor(model => model.DetailMessage)*@
@Html.ValidationMessageFor(model => model.DetailMessage)
<br />
@{ Html.Telerik().EditorFor(model => model.DetailMessage)
.Name("DetailMessageEditor")
.HtmlAttributes(new { style = "height: 200px" })
.Encode(false)
.Render();
}
</div>
<div>
<br />
<input type="submit" value="Create Ticket" title="Submits a new support ticket" />
<input type="submit" onclick="parent.location='@Url.Action("Index", "Support", "Index")'" value="Cancel" title="Return to Support Home" />
</div>
</fieldset>
}
最後,控制器代碼:
[HttpPost]
public ActionResult Create(SupportViewModel vm)
{
if (ModelState.IsValid)
{
SupportTicket SupportTicket = new SupportTicket()
{
SupportTicketID = Guid.NewGuid(),
EmployeeID = "123456",
TicketOpenDate = DateTime.Now,
TicketModifiedDate = DateTime.Now,
IsClosed = vm.IsClosed,
TicketSubject = vm.TicketSubject,
SupportIssueID = vm.SupportIssueID,
TicketPriorityID = vm.TicketPriorityID
};
TicketDetail TicketDetail = new TicketDetail()
{
TicketDetailID = Guid.NewGuid(),
SupportTicketID = SupportTicket.SupportTicketID,
TicketOrder = 1,
EmployeeID = "123456",
DetailDate = DateTime.Now,
DetailMessage = vm.DetailMessage
};
SupportTicket.TicketDetails.Add(TicketDetail);
db.SupportTickets.Add(SupportTicket);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.SupportIssueID = new SelectList(db.SupportIssues, "SupportIssueID", "Name", vm.SupportIssueID);
ViewBag.TicketPriorityID = new SelectList(db.TicketPriorities, "TicketPriorityID", "Name", vm.TicketPriorityID);
return View(vm);
}