0

誰かが助けてくれることを願っています-これは約2時間私を悩ませています-おそらく簡単なことです:)

Kendo UI Grid がコントローラーにリクエストを送信する

http://localhost:1418/user/update?UserID=1&UserName=Admin&RoleName=Admin&Email=c.j.hannon%40gmail.com&Active=true&Company%5BCompanyID%5D=1&Company%5BCompanyName%5D=asd

しかし、コントローラークラス「Company」はバインダーによってバインドされていませんか? ビューモデルとコントローラーアクションの署名を以下に示します。

[HttpGet]
        public JsonResult Update(UserViewModel model)
        {
            svcUser.UpdateUser(new UpdateUserRequest() {
                UserID=model.UserID,
                RoleID = model.RoleName,
                Email = model.Email,
                Active = model.Active.GetValueOrDefault(false),
                UserName = model.UserName
            });

            return Json("", JsonRequestBehavior.AllowGet);
        }

public class UserViewModel
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public string RoleName { get; set; }
        public string Email { get; set; }
        public bool? Active { get; set; }
        public CompanyViewModel Company { get; set; }
    }

乾杯クレイグ

4

1 に答える 1

1

いくつかのこと。当面の問題は、 Company がプリミティブ型ではなく複雑なオブジェクトにマップされることです。Kendo Grid はこれを行いません (この記事を書いている時点では)。推測ですが、グリッド上で外部キー バインディングを設定し、リストボックスから会社の ID を返すだけでよいでしょう。これはあなたが思っているほど悪くはなく、すぐに問題を解決し、見栄えも良くなります。

個人的な好みかもしれませんが、慣例のようです。ビューにバインドされたモデルには接尾辞 ViewModel を使用し、ビジネス オブジェクトには接尾辞 Model のみを使用します。したがって、Kendo Grid には常にモデルが入力されます。

元。:

public class UserModel
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public string RoleName { get; set; }
    public string Email { get; set; }
    public bool? Active { get; set; }
    public int CompanyID { get; set; }
}
public class CompanyModel
{
    public int ID { get; set; }
    public string Name { get; set; }
}
public class UserViewModel
{
    public UserModel UserModel { get; set; }
    public IList<CompanyModel> Companies { get; set; }
}

public ActionResult UserEdit(string id)
{
    var model = new UserViewModel();
    model.UserModel = load...
    model.Companies = load list...
    return View(model);
}

@model UserViewModel
...
column.ForeignKey(fk => fk.CompanyId, Model.Companies, "ID", "Name")
(Razor Notation)

しかし!これは単なる例です。Grid に IList を使用して Ajax をロードする方がよいでしょう。なぜなら、Grid に一度に多くのユーザーがいると仮定しているからです。ただし、ViewModel を List でサーバー バインドすることもできます。ただし、会社のリストはおそらく毎回同じなので、行編集を行うたびに Ajax でロードするのではなく、これをビューにマップします。(常に正しいとは限りません)

于 2013-03-20T01:43:23.497 に答える