1

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ではメッセージは表示されますが、フォームは引き続きコントローラーにポストバックされます。誰かがこれを見たことがありますか?

4

0 に答える 0