Kendo UIサーバーサイドラッパーを使用して、システム内のメッセージのリストを管理するためのグリッド(CRUD)を作成しています。モデルは非常にシンプルで、メッセージが150文字以下である必要があります。メッセージの長さを強制するために、モデルで次のデータ注釈を使用しています。
[StringLength(150, ErrorMessage = "Message exceeded the maximum length allowed. Please ensure you message is no longer than 150 characters")]
グリッドは次のようになります。
@model OperatorMessageListModel
@{
TransactionStatusType status = Model.TransactionStatus;
ViewBag.Title = String.Format("{0} Transaction Operator Messages", status);
string header = string.Format("{0} Transaction Messages", status);
string messagesTableId = string.Format("{0}TransactionOperatorMessagesGrid", status);
}
<h2>@header</h2>
@(Html.Kendo().Grid(Model.OperatorMessages)
.Name(messagesTableId)
.TableHtmlAttributes(new { style = "width: 50% height:75%" })
.Columns(columns =>
{
columns.Bound(m => m.Message).Title("");
columns.Bound(m => m.Index).Hidden(true);
if (!Model.IsInherited) //only edit if you own the list and there's anyhting to edit
{
columns.Command(cmd =>
{
cmd.Edit().UpdateText("Save");
cmd.Destroy();
}).Width("20%");
}
})
.Pageable()
.Scrollable(s => s.Enabled(false))
.ToolBar(cmd =>
{
if (!Model.IsInherited) //you can add messages to the lists that you own
{
cmd.Create().Text("Add new message");
}
if (!Model.OwnedByRoot && Model.OperatorMessages.Any()) //if the root owns this it can't override or inherit its own list.
{
var actionName = Model.IsInherited ? "OverrideTrasactionMessageList" : "InheritTrasactionMessageList";
cmd.Custom().Text(Model.OverrideOrInheritButtonText).Action(actionName, "OperatorMessage", new { Model.OrgId, Model.TransactionStatus });
}
}
)
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(ds => ds
.Server()
.Model(model => model.Id(m => m.Index))
.Create(c => c.Action("CreateTransactionMessage", "OperatorMessage", new { @Model.OrgId, @Model.TransactionStatus }))
.Read(c => c.Action("List", "OperatorMessage", new { @Model.OrgId, @Model.TransactionStatus }))
.Update(c => c.Action("EditTransactionMessage", "OperatorMessage"))
.Destroy(c => c.Action("DeleteTrasactionMessage", "OperatorMessage"))
)
)
コントローラコードは次のとおりです。
[HttpPost]
public ActionResult CreateTransactionMessage([DataSourceRequest] DataSourceRequest request,
OperatorMessageModel newMessage, string OrgId,
string TransactionStatus)
{
_transactionOperatorMessageService.AddOperatorMessage(OrgId, TransactionStatus, newMessage,
CurrentUser.Name());
return RedirectToAction("List", new {OrgId, TransactionStatus});
}
ユーザーが150文字を超えるメッセージを入力すると、検証メッセージがユーザーに表示されることを期待しています。また、フォームはコントローラーにポストバックされません。ChromeとFirefoxではすべてが期待どおりに機能します。ただし、IE8ではメッセージは表示されますが、フォームは引き続きコントローラーにポストバックされます。誰かがこれを見たことがありますか?