0

У меня есть следующие ViewModel и соответствующие две модели.Ошибка обновления ViewModel с ошибкой

Я отображение данных из этого ViewModel на виде, но когда я отправляю данные для обновления, следующее сообщение об ошибке

Модели элемент передается в словарь типа «WebMSM.Models.ComplainDetailsVm», но для этого словаря требуется элемент модели типа «WebMSM.Models.REPAIRING».

public partial class ComplainDetailsVm 
{ 

    public virtual REPAIRING REPAIRINGs { get; set; } 
    public virtual COMPLAIN COMPLAINs { get; set; } 
} 

REPAIRING.cs

public partial class REPAIRING 
{ 

    [Key] 
    [DisplayName("JOBSHEET NO")] 
    public int JOBSHEET_NO { get; set; } 

    [DisplayName("IN TIME")] 
    public Nullable<System.DateTime> IN_TIMESTAMP { get; set; } 

    [DisplayName("CREATE TIME")] 
    public Nullable<System.DateTime> CREATE_TIMESTAMP { get; set; } 

    [DisplayName("LAST EDIT TIME")] 
    public Nullable<System.DateTime> LAST_EDIT_TIMESTAMP { get; set; } 
} 

COMPLAIN.cs

public partial class COMPLAIN 
{ 

    [Key] 
    [DisplayName("JOBSHEET NO")] 
    public int JOBSHEET_NO { get; set; } 

    [Required] 
    [DisplayName("COMPANY NAME")] 
    public string COMPANY_NAME { get; set; } 

    [Required] 
    [DisplayName("MODEL NAME")] 
    public string MODEL_NAME { get; set; } 
} 

CONTROLLER ДЕЙСТВИЯ

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(int? id,ComplainDetailsVm model) 
    { 
     if (ModelState.IsValid) 
     { 
      var r = model.REPAIRINGs; 
      var c = model.COMPLAINs; 
      db.Entry(r).State = EntityState.Modified; 
      db.SaveChanges(); 
     }  
     return View(model); 
    } 

UPDATE

VIEW

@model WebMSM.Models.ComplainDetailsVm 


@{ 
ViewBag.Title = "EditRepairingComplain"; 
} 

<h2>Edit</h2> 


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

<div class="form-horizontal"> 

    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    @Html.HiddenFor(model => model.REPAIRINGs.JOBSHEET_NO) 
    @Html.HiddenFor(model => model.COMPLAINs.JOBSHEET_NO) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.COMPLAINs.COMPANY_NAME, 

htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-6"> 
       @Html.TextBoxFor(model => model.COMPLAINs.COMPANY_NAME, new { @class = "form-control", @readonly = "readonly" }) 
       @Html.ValidationMessageFor(model => model.COMPLAINs.COMPANY_NAME, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.COMPLAINs.MODEL_NAME, htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-6"> 
       @Html.TextBoxFor(model => model.COMPLAINs.MODEL_NAME, new { @class = "form-control", @readonly = "readonly" }) 
       @Html.ValidationMessageFor(model => model.COMPLAINs.MODEL_NAME, "", new { @class = "text-danger" }) 
      </div> 
     </div> 


     <div class="form-group"> 
      @Html.LabelFor(model => model.REPAIRINGs.IN_TIMESTAMP, htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-6"> 
       @Html.EditorFor(model => model.REPAIRINGs.IN_TIMESTAMP, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.REPAIRINGs.IN_TIMESTAMP, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.REPAIRINGs.CREATE_TIMESTAMP, htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-6"> 
       @Html.EditorFor(model => model.REPAIRINGs.CREATE_TIMESTAMP, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.REPAIRINGs.CREATE_TIMESTAMP, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

<div class="form-group"> 
       @Html.LabelFor(model => model.REPAIRINGs.LAST_EDIT_TIMESTAMP, htmlAttributes: new { @class = "control-label col-md-4" }) 
       <div class="col-md-6"> 
        @Html.EditorFor(model => model.REPAIRINGs.LAST_EDIT_TIMESTAMP, new { htmlAttributes = new { @class = "form-control" } }) 
        @Html.ValidationMessageFor(model => model.REPAIRINGs.LAST_EDIT_TIMESTAMP, "", new { @class = "text-danger" }) 
       </div> 
      </div> 







     <div class="form-group"> 
      <div class="col-md-offset-5 col-md-6"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

UPDATE ADDED Получ

// GET: Repairing/Edit/5 
    public ActionResult Edit(int? id) 
    { 





     var vm = new ComplainDetailsVm(); 
     var r = db.REPAIRINGs.Find(id); 
     var c = db.COMPLAINs.Find(id); 
     if (r != null) 
     { 
      vm.REPAIRINGs = r; 
      vm.COMPLAINs = c; 


     } 
     //ViewData["LIST_ESTIMATE_AMOUNT_OK_FROM_CUSTOMER"] = lstOKNOTOK; 
     return View("EditRepairingComplain",vm); 
    } 

Спасибо.

+0

Сообщение об ошибке само собой разумеется - передается экземпляр 'ComplainDetailsVm' в представление, которое имеет' @model WebMSM.Models.REPAIRING' - измените одно или другое так, чтобы они соответствовали –

+0

. Я добавляю представление для вашего объяснения. Я добавляю правильную модель к представлению. – Hemal

+0

Вам нужно показать свой метод GET. Представленное вами представление не имеет ничего общего с ошибкой. –

ответ

0

Вы можете иметь свой View s распознаванию ViewModel двумя способами: вы можете иметь рамочный рисунок MVC, что для вас, или вы можете использовать strongly typed views

В вашем случае, ваше мнение сильно типизированных, но относится к неправильный класс объекта. Это может произойти, если вы скопировали свое представление из другого файла. Вы должны увидеть следующую строку в файл cshtml:

@model WebMSM.Models.REPAIRING 

заменить это:

@model WebMSM.Models.ComplainDetailsVm 

, и вы больше не должны получить сообщение об ошибке.

Edit:

Стоит отметить, что эти линии должны быть в верхней части файла cshtml возвращенных методами действий.

+0

Я уже обновил свой вопрос с представлением. Он уже содержит '@model WebMSM.Models.ComplainDetailsVm' – Hemal

+1

в вашем методе post action, вы также возвращаете' return View («EditRepairingComplain», vm); '? если нет, пожалуйста, также покажите 'edit.cshtml' –

+0

Ой, моя ошибка. Ты прав. Я возвращал Edit.cshtml после публикации и сохранения. Я изменил его соответственно, и теперь он работает отлично. Огромное спасибо. – Hemal

Смежные вопросы