簡體   English   中英

MVC編輯物件無法運作

[英]MVC Edit object doesn't work

我正在使用Entity Framework,並且有2個類:

    public class User
    {
            public int UserID { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string Email { get; set; }
            public string UserName { get; set; }
            public string Password { get; set; }
            public int PermissionGroupID { get; set; }
            public string Comments { get; set; }

            public virtual PermissionGroup PermissionGroup { get; set; }
    }

public class PermissionGroup
{
        public int PermissionID { get; set; }
        public string PermissionValue { get; set; }
}

當然,在我的數據庫中,我在User.PermissionGroupID和PermissionGroup.PermissionID之間有FK

現在,我嘗試使用用戶模型來執行編輯控制器並進行查看:

public class UserModel
{
    public User User { get; set; }
    public SelectList PermissionGroups { get; set; }
    public int SelectedPermissionGroup { get; set; }
}

與控制器:

   public ActionResult Edit(int id = 0)
    {
        UserModel model = new UserModel ();
        model.User= managerUser.GetObjectById(id);
        model.PermissionGroups = new SelectList(managerPermission.GetAllList(), "PermissionID ", "PermissionValue");

        if (model.User== null)
        {
            return HttpNotFound();
        }

        model.SelectedPermissionGroup = model.User.PermissionGroupID;

        return View(model);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(UserModel model)
    {
        if (ModelState.IsValid)
        {
            model.User.PermissionGroupID = model.SelectedPermissionGroup;
            managerUser.EditObject(model.User);
            return RedirectToAction("Index");
        }

        UserModel newModel = model;
        newModel.User = managerUser.GetObjectById(model.UserID);
        newModel.PermissionGroups = new SelectList(managerPermission.GetAllList(), "PermissionID ", "PermissionValue");

        return View(newModel);
    }

管理器中的EditObject是這樣的:

public virtual int EditObject(T objToEdit)
{
    DbEntities.Set<T>().Attach(objToEdit);
    DbEntities.Entry(objToEdit).State = EntityState.Modified;
    return DbEntities.SaveChanges();
}

在我看來,我不會提出任何疑問,這就是我所擁有的:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>User</legend>

        @Html.HiddenFor(model => model.User.UserID)

//Everything else to edit about the user....

        <div class="form-group">
            @Html.LabelFor(model => model.User.PermissionGroupID)
            @Html.DropDownListFor(model => model.SelectedPermissionGroup, Model.PermissionGroups, new { @class = "form-control" })
            <p class="help-block">@Html.ValidationMessageFor(model => model.User.PermissionGroupID)</p>
        </div>

        <p>
            <input type="submit" value="Save" />
            @Html.ActionLink("Back", "Index")
        </p>
    </fieldset>
}

因此,當我單擊“保存”時,根據我的斷點,它會正確傳遞所有內容,但不會將User類中的PermissionGroup屬性填充為PermissionGroupID(它確實從選定的下拉列表中接收ID。然后返回到索引視圖)但沒有進行任何更改。

我在其他項目中使用了完全相同的EditObject方法,並且在dropdownlist和all上都可以正常工作。

我想念什么?

我懷疑這是錯誤,您正在驗證Model.User.PermissionGroupID但您已將下拉列表與Model.SelectedPermissionGroup

@Html.DropDownListFor(model => model.SelectedPermissionGroup, 
                      Model.PermissionGroups, 
                      new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.User.PermissionGroupID)

應該是這樣的:

@Html.DropDownListFor(model => model.User.PermissionGroupID, 
                               Model.PermissionGroups, 
                               new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.User.PermissionGroupID)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM