簡體   English   中英

如何使用viewmodels插入記錄:Asp.Net Mvc

[英]How to insert record using viewmodels : Asp.Net Mvc

介紹

我正在與mvc項目一起工作,實現方法是代碼優先的。 我正在使用的領域模型有70多個field.So我制作了ViewModels。

需要創建視圖模型是由於創建了將信息存儲在服務器端的表單向導(會話變量)。

領域模型

public class RegisterationDM
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
        public int RegisterationId { get; set; }
//other fields
}

主視圖模型

public class RegistrationViewModel
{
        public PersonalViewModel PersonalViewModel {get;set; }
        public DetailViewmodel DetailedViewmodel { get; set; }
        public PhysicalDetailViewModel PhysicalDetailViewModel { get; set; }
        public RequirementViewModel RequirementViewModel { get; set; }
        public CreationInfoViewModel CreationInfoViewModel { get; set; }
}

單獨的班級

public class PersonalViewModel()
{
//fields
}
public class DetailViewmodel()
{
//fields
}
public class PhysicalDetailViewModel()
{
//fields
}
public class RequirementViewModel()
{
fields
}
public class CreationInfoViewModel()
{
//fields
}

記錄插入碼

public ActionResult SaveInformation()
        {
            RegisterationDM regdm = new RegisterationDM();
            RegistrationViewModel regvm = new RegistrationViewModel();

            PersonalViewModel personalvm = (PersonalViewModel)Session["Personal"];
            DetailViewmodel detailvm = (DetailViewmodel)Session["Detail"];
            PhysicalDetailViewModel physicalvm = (PhysicalDetailViewModel)Session["Physical"];
            RequirementViewModel requirementvm = (RequirementViewModel)Session["Requirement"];

            CreationInfoViewModel createdinforvm = new CreationInfoViewModel();
            createdinforvm.CreatedBy = "";
            createdinforvm.CreatedDate = DateTime.Now;

            regvm.PersonalViewModel = personalvm;
            regvm.DetailedViewmodel = detailvm;
            regvm.PhysicalDetailViewModel = physicalvm;
            regvm.RequirementViewModel = requirementvm;
            regvm.CreationInfoViewModel = createdinforvm;
            //here assigning of view model to domain model
            db.Reg.Add(regdm);
            db.SaveChanges();
            return View();
        }

所有動作(更新)

public ActionResult Step1()
        {
            RegistrationViewModel regvm = new RegistrationViewModel();
            return View(regvm.PersonalViewModel);
        }
        [HttpPost]
        public ActionResult Step1(PersonalViewModel personalvm)
        {
            if (ModelState.IsValid)
            {
                //Store the wizard in session
                Session["Personal"] = personalvm;
                return RedirectToAction("Step2");
            }
            else
            { 
            return View(personalvm);
            }
        }

        public ActionResult Step2()
        {
            if (Session["Personal"] != null)
            {
                RegistrationViewModel regvm = new RegistrationViewModel();
                return View(regvm.DetailedViewmodel);
            }
            else
            {
                return RedirectToAction("Step1");
            }
        }
        [HttpPost]
        public ActionResult Step2(DetailViewmodel detailvm)
        {
            if (ModelState.IsValid)
            {
                //Store the wizard in session
                Session["Detail"] = detailvm;
                return RedirectToAction("Step3");
            }
            return View(detailvm);
        }

        public ActionResult Step3()
        {
            if (Session["Detail"] != null && Session["Personal"] != null)
            {
                RegistrationViewModel regvm = new RegistrationViewModel();
                return View(regvm.PhysicalDetailViewModel);
            }
            else
            {
                return RedirectToAction("Step1");
            }
        }
        [HttpPost]
        public ActionResult Step3(PhysicalDetailViewModel physicalsvm)
        {
            if (ModelState.IsValid)
            {
                //Store the wizard in session
                Session["Physical"] = physicalsvm;
                return RedirectToAction("Step4");
            }
            return View(physicalsvm);
        }

        public ActionResult Step4()
        {
            if (Session["Detail"] != null && Session["Personal"] != null && Session["Physical"] != null)
            {
                RegistrationViewModel regvm = new RegistrationViewModel();
                return View(regvm.RequirementViewModel);
            }
            else
            {
                return RedirectToAction("Step1");
            }
        }
        [HttpPost]
        public ActionResult Step4(RequirementViewModel requirementvm)
        {
            if (ModelState.IsValid)
            {
                Session["Requirement"] = requirementvm;
                return RedirectToAction("SaveInformation");
            }
            return View(requirementvm);
        }

如何使用主視圖模型添加(記錄)。我應該先映射嗎?

我知道不可能那樣做,所以我問,有沒有這樣做的正確方法,那可能是什么?最好的方法,正確的方法或錯誤的方法? 即使很難實現,我也會更喜歡標准實現。

如果有人對這個問題有想法,請提供幫助。任何幫助或參考將不勝感激。感謝您的時間。

(由於缺乏知識,可能是我犯了一些錯誤。歡迎選民投票,但請留下評論,以便我改善問題。)

通過定義您自己的自定義模型活頁夾將適用於此類情況。 我建議您找到一些有用的資源以獲取有關如何實現此目的的知識,這也是一篇簡單明了的文章CodeProject Custom Model Binder 讓我知道這是否有用

我們使用了Automapper來映射字段。 這是非常有幫助的。 保持代碼干凈。 它也具有可定制的前后映射功能。

暫無
暫無

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

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