私は現在、(Razorビューエンジンを使用して)働いている最初のMVC3アプリケーションで作業しています。オープンソースのTelerik Q1 2012コントロールは、私が必要とする機能をたくさん提供してくれるので便利です。今私が抱えている問題は、Telerik Editorコントロールを使用して、ビューモデルにバインドすることです。 ViewModelの値を正しく返すページに標準のHtml.EditorFor()コントロールがありますが、Telerik Editorにバインドされているプロパティはnullです。彼らのドキュメントはまったく役に立たず(EditorForを一度だけ言及しています)、フォーラムでもあまりにも多くの質問に答えるようには見えません。私の主な質問は、Telerik MVC3エディタをモデルにバインドする方法と、それにバインドされたプロパティを設定する方法です。ビューモデルのための私のコードは以下の通りです(あなたが提供できる助けをしてくれてありがとう、私はMVCのまったく新しいものです。私はこのプロジェクトを自分でやっています。グループ):Telerik MVC 3(Razor)Q1 2012エディタEditorFor()バインディング戻り値NULL値と控えめな検証が機能しない
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);
}