1

ドロップダウン リスト クライアントの編集テンプレートを使用すると、コントローラーの ajax .Update("_SaveAjaxEditing", "AptProfile") に null 値が渡されます。

グリッドがバインドされている FormViewModel のプロパティ:

  [UIHint("BuildingsGrid"), Required]
                [DisplayName("Building ID")]
                 public int BuildingID
                {
                    get;
                    set;
                }).

これが私の見解です:

 <%= Html.Telerik().Grid<PayRent.Models.AptProfileFormViewModel1>()
                    .Name("Profiles")
                    .DataKeys(dataKeys => dataKeys.Add(c => c.AptProfileID))
                                    .ToolBar(commands => commands.Insert())
                    .DataBinding(binding => 
                        {
                            binding.Ajax()
                            .Select("GetProfiles", "AptProfile")
                            .Insert("_InsertAjaxEditing", "AptProfile")
                            .Update("_SaveAjaxEditing", "AptProfile")
                            .Delete("_DeleteAjaxEditing", "AptProfile");

                        })

                    .Columns(columns => 
                    {
                        columns.Bound(o => o.AptProfileID);
                        columns.Bound(o => o.BuildingID);
                        columns.Bound(o => o.AptID);
                        columns.Bound(o => o.AptRate);
                        columns.Bound(o => o.AptSize);
                        columns.Bound(o => o.MoveInDate);
                        columns.Command(s =>
                        {
                            s.Edit();
                            s.Delete();


                        });


                    })
                                    .Editable(editing => editing.Mode(GridEditMode.InLine))
                                    .ClientEvents(events => events.OnEdit("onEdit"))
                    .Pageable()
            %>
    </p>

 <script type="text/javascript">

function onEdit(e) {
//            $(e.form).find('#BuildingsGrid').data('tDropDownList').select(function (dataItem) {
//                return dataItem.Text == e.dataItem['BuildingGrid'];
//            });
        }


    </script>



My EditTemplate:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.Telerik().DropDownList()
        .Name("BuildingsGrid")
            .BindTo(new SelectList((IEnumerable)ViewData["Buildings"], "BuildingID", "Name"))
%>)

これが私のコントローラーです:

 [AcceptVerbs(HttpVerbs.Post)]
    //[CultureAwareAction]
    [GridAction]
    public ActionResult _SaveAjaxEditing(int id, int? BuildingGrid)
    {
        ApartmentProfileRepository repo = new ApartmentProfileRepository();
        AptProfile profile = repo.Get(id);

        TryUpdateModel(profile);
        repo.Save();
        return View(new GridModel(GetAllProfiles()));
    }
4

2 に答える 2

3

すべてを Ajax 化したままにしたい場合は、viewbag を使用せずに実行する必要があります。私のコンボボックスは別のエディター テンプレートにあります。SelectList を JsonResult として返すだけです。とはいえ、コンボが開かれるたびにサーバーメソッドが呼び出されるため、ユーザーがページにいる間にそのコンボボックスのデータが変更されることが予想される場合にのみ、そのようにすることをお勧めします。

以下の例では、ユーザーがカテゴリを選択しているのと同じページにカテゴリを追加できるため、毎回サーバーにアクセスする必要があります。しかし、他のページでは、(ViewBag/ViewData を介して) サーバー側バインディングを使用して、サーバーに 1 回だけアクセスするようにしています。

私のエディターテンプレート:

@(Html.Telerik().ComboBox()
.Name("YourNameGoesHere")
.DataBinding(binding => binding.Ajax().Select("SelectCategoriesForComboBox","Shared")))

次に、コントローラーで:

public EquipmentEntities db = new EquipmentEntities();
public List<SelectListItem> CategoryList
{
    get
    {
        var m = db.Categories
        .Select(e => new{ Id = e.Id, Name = e.Name })
        .OrderBy(e => e.name);
        List<SelectListItem> sl = new SelectListItem(m.ToList(), "Id", "Name").ToList();

        //insert a blank item as the first entry
        sl.Insert(0, (new SelectListItem { Text = "", Value = string.Empty }));
        return sl;
    }
}

[HttpPost]
public ActionResult SelectCategoryForComboBox()
{
    return new JsonResult { Data = CategoryList };
}

少し遅れているかもしれませんが、誰かの役に立てば幸いです。

于 2011-08-23T09:39:18.383 に答える
0

まず、ビュー内の列の名前を、編集テンプレートおよびコントローラー アクション パラメーターの名前と一致させる必要があります。コントローラー アクションで int パラメーターを null 可能にする必要はないと思います。

次に、コントローラー アクションで、編集テンプレートの ViewData["Buildings"] を設定する必要があります。ビューを返す前に、プロファイル オブジェクトの現在の値を選択します。

例えば

public ActionResult _SaveAjaxEditing(int id, int BuildingsGrid)
    {
        ApartmentProfileRepository repo = new ApartmentProfileRepository();
        AptProfile profile = repo.Get(id);

        // Save the building ID in the profile
        profile.BuildingID = BuildingsGrid;

        TryUpdateModel(profile);
        repo.Save();

        // Load the Building objects into the ViewData
        ViewData["Buildings"] = GetBuildings();

        return View(new GridModel(GetAllProfiles()));
    }
于 2011-04-28T21:47:46.713 に答える