1

这是我的场景:(这些都必须以与公认要求相同的观点来完成)

  1. 用户输入一些搜索条件来搜索用户。
  2. 页面列出了带有更新链接的搜索结果。
  3. 用户单击其中一个更新链接,会出现一个表单以启用编辑数据。
  4. 用户更改并保存绑定到表单的数据。

我为此视图使用了视图模型。这里是。

[Serializable]
public class UserAddModel
{
    public UserSearchCriteria UserSearchCriteria { get; set; }

    public UserEntity User { get; set; }

    public List<UserPrincipalDto> SearchResults { get; set; }
}

这是我的控制器:

using System;


namespace x.Web.BackOffice.Controllers
{
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
[Authorize(Roles = "Admin")]
public class UserController : Controller
{
    private readonly IAuthentication _authentication;

    private readonly List<RoleEntity> roles = new Y.Framework.Data.Repository<RoleEntity>().Get(null).ToList();
    private Repository<UserEntity> repository = new Repository<UserEntity>();

    [ImportingConstructor]
    public UserController(IAuthentication authentication)
    {
        this._authentication = authentication;
    }

    public ActionResult Index()
    {
        return View(new UserAddModel());
    }

    [HttpPost]
    public ActionResult GetSearchResults(UserAddModel model)
    {
        if (ModelState.IsValid)
        {
            try
            {
                List<UserPrincipalDto> results = 
                    _authentication.SearchUsers(
                        ConfigurationManager.AppSettings["DomainName"],
                        model.UserSearchCriteria.FirstName,
                        model.UserSearchCriteria.LastName,
                        model.UserSearchCriteria.Username);

                model.SearchResults = results;

                Session["UserAddModel"] = model;

                return View("Index", model);
            }
            catch (Exception ex)
            {
                Logger.Log(ex, User.Identity.Name);
            }
        }
        else
        {
            ModelState.AddModelError("", "Error!");
        }

        Session["UserAddModel"] = model;

        return View("Index", model);
    }

    public ActionResult Save(string username)
    {
        UserAddModel model = Session["UserAddModel"] as UserAddModel;

        UserEntity exists = repository.Get(u => u.Username == username).FirstOrDefault();

        if (exists == null) 
        {
            UserPrincipal userPrincipal =
            _authentication.GetUserDetails(
                ConfigurationManager.AppSettings["DomainName"],
                username);

            model.User = new UserEntity();
            model.User.Id = userPrincipal.Guid.Value;
            model.User.FirstName = userPrincipal.DisplayName.FullNameToFirstName();
            model.User.LastName = userPrincipal.DisplayName.FullNameToLastName();
            model.User.Email = userPrincipal.EmailAddress;
            model.User.Username = userPrincipal.SamAccountName;    
        }
        else
        {
            model.User = new UserEntity();
            model.User.Id = exists.Id;
            model.User.FirstName = exists.FirstName;
            model.User.LastName = exists.LastName;
            model.User.Email = exists.Email;
            model.User.Username = exists.Username;
            model.User.RoleId = exists.RoleId;
        }

        ViewBag.Roles = roles;

        return View("Index", model);
    }

    [HttpPost]
    public ActionResult Save(UserAddModel model)
    {
        UserEntity exists = repository.Get(u => u.Id == model.User.Id).FirstOrDefault();

        if (exists == null) 
        {
            Result result = repository.Save(model.User);    

            HandleResult(result, model);
        }
        else 
        {
            Result result = repository.Save(model.User, PageMode.Edit);

            HandleResult(result, model);
        }

        ViewBag.Roles = roles;

        return View("Index", model);
    }
}
}

如您所见,我的视图中有两种不同的形式,我将整个视图模型存储在我的控制器中的 Session 中。但我认为这还不够好。如果会话过期或者我必须使用负载均衡器部署我的应用程序怎么办?

开发这种页面的最佳方法是什么?我愿意接受任何建议。

提前致谢,

4

0 回答 0