1

我有一个带有 /Admin/NewCourse 页面的管理部分想用它来通过表单保存新添加的课程详细信息的详细信息。课程模型是首先使用存储库模式使用 POCO 创建的。

在我看来,我有以下几点:

@using(Html.BeginForm("NewCourse","Admin",FormMethod.Post))
      {
        <div class="row">
          <div class="twelve columns">
            <div class="row">
              <div class="six columns">
                @Html.LabelFor(c => c.Course.Name)
                @Html.TextBoxFor(c => c.Course.Name)
              </div>
              <div class="six columns">
                @Html.LabelFor(c => c.Course.Author)
                @Html.TextBoxFor(c => c.Course.Author)
              </div>

              <div class="row">
                <div class="six columns">
                  @Html.LabelFor(c => c.Course.UploadDate)
                  @Html.TextBoxFor(c => c.Course.UploadDate)
                </div>
                <div class="six columns">
                  @Html.LabelFor(c => c.Course.ExpiryDate)
                  @Html.TextBoxFor(c => c.Course.ExpiryDate)
                </div>
              </div>

              <div class="row">
                <div class="twelve columns">
                  @Html.LabelFor(c => c.Course.Description)
                  @Html.TextAreaFor(c => c.Course.Description)
                </div>
              </div>

              <div class="row">
                <div class="six columns">
                  @Html.LabelFor(c => c.Course.ParticipationPoints)
                  @Html.TextBoxFor(c => c.Course.ParticipationPoints)
                </div>  
              </div>
            </div>
          </div>
            <input type="submit" value="Submit button"/>
        </div>

        }

在我的控制器中,我以下列方式设置了一个 HTTP 帖子:

[HttpPost]
    public ActionResult NewCourse(AdminViewModel model)
    {
        Course newCourse = new Course();
        newCourse.Name = model.Course.Name;
        newCourse.Author = model.Course.Author;
        newCourse.UploadDate = model.Course.UploadDate;
        newCourse.ExpiryDate = model.Course.ExpiryDate;
        newCourse.Description = model.Course.Description;
        newCourse.ParticipationPoints = model.Course.ParticipationPoints;             
        return View(model);
    }

正如您从上面的 POST 中看到的,我正在传递一个 AdminViewModel,其中包含以下代码行:

 private Repository<Course> courseRepository;   

如何更新控制器中的 POST 方法以将新课程的更改保存到 courseRepository 列表中?

4

2 回答 2

1

这取决于您的存储库的实现以及您是否实现了保存方法。

在我的存储库模式的实现中,我是通过 t4 脚手架来实现的。它有以下两种方法来处理插入或更新。

public void InsertOrUpdate(TEntity entity)
    {
        dynamic ent = entity;

        if (ent.Id == default(System.Guid)) {
            // New entity
            ent.Id = Guid.NewGuid();
            _context.Set<TEntity>().Add(ent);
        } else {
            // Existing entity
            _context.Entry(ent).State = EntityState.Modified;
        }
    }

public void Save()
    {
        _context.SaveChanges();
    }

所以,我首先通过传递新创建的实体来调用插入或更新方法。然后调用 save 方法,该方法将保存该上下文中的更改。

希望有帮助。

干杯,阿米拉

于 2013-07-02T10:07:01.150 回答
1

你可以阅读我的代码,我使用存储库模式来..

这是我的控制器

[Authorize]
        public ActionResult EditUser(int UserID)
        {
            List<UserViewModel> UserViewModel = _AccountService.userViewModel(UserID);
            return View(UserViewModel.FirstOrDefault());
        }

        [Authorize]
        [HttpPost]
        public ActionResult EditUser(UserViewModel updateUser)
        {
            var UpdateData = _AccountService.UpdateDataUser(updateUser.UserID, updateUser.FullName, updateUser.Email, updateUser.IsActive, updateUser.IsMaster);

            if (UpdateData != null)
            {
                return RedirectToAction("Users");
            }
            return View(UpdateData);
        }

这是我的服务类\

public List<UserViewModel> userViewModel(int UserID)
        {
            List<User> user = (from d in _UserRepository.All()
                               where d.UserID == UserID
                               select d).ToList();

            List<UserViewModel> userViewModel = new List<UserViewModel>();
            foreach(User users in user)
            {
                userViewModel.Add(new UserViewModel 
                {
                    Email = users.Email,
                    FullName = users.FullName,
                    UserName = users.UserName,
                    UserPassword = users.UserPassword,
                    UserID = users.UserID,
                    HotelID = users.HotelID,
                    IsActive = users.IsActiveq,
                    IsMaster = users.IsMaster
                });
            }
            return userViewModel;
        }



public User UpdateDataUser(int UserID,string FullName, string Email, bool Active, bool MasterUser)
        {
            User user = (from d in _UserRepository.All()
                         where d.UserID == UserID
                         select d).Single();

            var updateData = new UserViewModel 
            {
                UserID = UserID,
                FullName = FullName,
                Email = Email,
                IsActive = Active,
                IsMaster = MasterUser
            };

            user.UserID = updateData.UserID;
            user.FullName = updateData.FullName;
            user.Email = updateData.Email;
            user.IsActiveq = updateData.IsActive;
            user.IsMaster = updateData.IsMaster;

            _UserRepository.Attach(user);
            _UserRepository.CommitChanges();

            return user;
        }
于 2013-07-02T09:54:51.357 回答