2011-09-15 58 views
1

Telerik的ASP.NET MVC 2011年第二季度如何通過Ajax的複雜類型的數據綁定

我有這勢必阿賈克斯一格:

@(Html.Telerik().Grid<IUser>() 
       .Name("UsersGrid") 
       .DataBinding(binding => binding.Ajax().Select("UsersGridSelect", "User", new { area = "Admin" })) 
       .ClientEvents(events => events.OnDataBinding("onGridRefresh")) 
    ... 
    ... 

這是我onGridRefresh處理程序:

function onGridRefresh(e) 
{ 
    var modelData = 
    { 
     Username:  $('#SearchModel_Username').val(), 
     FirstName:  $('#SearchModel_FirstName').val(), 
     LastName:  $('#SearchModel_LastName').val(), 
     IsLocked:  $('#SearchModel_IsLocked').is(':checked'), 
     ClientId:  $('#SearchModel_ClientId').val(), 
     UserCode:  $('#SearchModel_UserCode').val(), 
     ExpireDateFrom: $('#SearchModel_ExpireDateFrom').val(), 
     ExpireDateTo: $('#SearchModel_ExpireDateTo').val() 
    }; 

    e.data = { searchModel: modelData }; 
} 

這是我的控制器:

[GridAction] 
public ActionResult UsersGridSelect(UserSearchModel searchModel) 
{ 
    IList<IUser> userList = searchModel == null ? new List<IUser>() : _repository.GetUsers(searchModel); 

    return View(new GridModel(userList)); 
} 

這個設置不起作用,我知道......但是至少它證明了我在做什麼。 當我通過我作爲單獨的參數值,它的工作原理:

public ActionResult UsersGridSelect(string Username, string Firstname, string LastName,....) 

但我會prefere在把它作爲一個對象。有什麼辦法可以實現嗎?

回答

0

如果您使用 e.data = modelData 它將正確綁定。

+0

試過已經 - 沒有工作。如果你這樣做,問題是你需要在處理器方法上聲明什麼類型。輸入'UserSearchModel'不起作用。在這種情況下,參數'searchModel'始終爲空。 – Andreas

+0

我不知道該說什麼。我正在做一個非常類似的事情,使用帶有屬性StartDate和EndDate的CalendarModel,並在onDataBinding中傳遞它們。我能夠使用我的自定義類型作爲唯一的參數,這兩個屬性正確地綁定到我的模型對象。我會說你的觀點和UserSearchModel發佈,也許這將揭示一些有關這個問題。 – sharpper