我繼承了一個mvc應用程序。這個應用程序首先使用數據庫實體框架。這是沒有viewmodels和viewbags的下拉和錯誤消息。現在我的任務是對其進行很多更改,因爲您無法驗證不在主類中的相關屬性等。如何以及在哪裏將viewmodel連接到dbcontext
我想創建一個viewmodel,這樣我只能顯示必要的數據,驗證它,而不是直接鏈接到模型。到目前爲止,我使用我創建的視圖模型爲窗體上的所有字段獲得了空值。我曾嘗試使用automapper卻得到了一個映射錯誤:「缺少類型映射配置或不支持的映射」
這裏是控制器的一部分:
public ActionResult ChangeOwner(int id = 0)
{
var combine = new combineValidationAssetViewModel();
Mapper.CreateMap<ToolingAppEntities1, combineValidationAssetViewModel>();
Mapper.CreateMap<combineValidationAssetViewModel, ToolingAppEntities1>();
Asset asset = db.Assets.Find(id);
Mapper.Map(combine, asset, typeof(combineValidationAssetViewModel), typeof(Asset));
.....
return View(combine);
}
這裏是視圖模型的一部分:
public class combineValidationAssetViewModel
{
public Asset Assets { get; set; }
public Transaction Transactions { get; set; }
public LocationType LocationTypes { get; set; }
public ToolType ToolTypes { get; set; }
public OwnerType OwnerTypes { get; set; }
public int AssetId { get; set; }
public int fkToolTypeId { get; set; }
[Required]
[Display(Name = "Owner")]
public int fkOwnerId { get; set; }
[Required]
[Display(Name = "Location")]
public int fkLocationId { get; set; }
public int LocationTypeId { get; set; }
public int OwnerTypeId { get; set; }
這裏是視圖的一部分:
@model ToolApp.ViewModels.combineValidationAssetViewModel
.....
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Asset</legend>
@Html.HiddenFor(model => model.AssetId)
@Html.HiddenFor(model => model.CreatedByUser)
@Html.HiddenFor(model => model.CreateDate)
@Html.HiddenFor(model => model.SerialNumber)
@Html.HiddenFor(model => model.LocationTypeId)
<div class="editor-label">
@Html.LabelFor(model =>model.SerialNumber)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.SerialNumber)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.fkToolTypeId, "Tool Name")
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.Description)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.fkOwnerId, "New Owner")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.fkOwnerId, new SelectList(ViewBag.fkOwnerId, "Value", "Text"), new{style="width:320px;height:25px;"})
@Html.ValidationMessageFor(model => model.fkOwnerId),
的形式顯示,但它爲空(在任何字段沒有值顯示。我想手動映射它,所以我明白了。已經嘗試過automapper,但它還沒有工作。我從這裏和其他網站嘗試了一些想法,但結果相同。我還沒有完全理解linq,所以我的問題也可能存在。
這個主控制器有10個不同的動作結果,並充滿了數據調用和視圖包。我正在尋找關於我應該去的方向的建議。我需要得到這個東西的工作,但也想對它做出改變,將它移到一個可行的mvc應用程序的方向。目前的主要問題是如何將視圖模型與dbcontext連接起來。我發現上下文在控制器這樣的頂部:
{ private ToolingAppEntities1 db = new ToolingAppEntities1();
其次是許多包括...
任何建議,將不勝感激
爲什麼在地球上您在控制器操作中調用Mapper.CreateMap? AutoMapper映射應該只爲每個AppDomain定義一次,在ASP.NET MVC應用程序中顯然是你的'Application_Start'方法。 –
請添加ChangeOwner動作的剩餘部分,以便我們可以看到返回的內容。 – Martin4ndersen
因爲我是初學者,不確定放在哪裏。我在一些例子中看到它,但沒有什麼可以與之比較。這就是我問這個問題的原因。感謝您的迴應。 – Sue