2016-11-13 234 views
-1

錯誤爲什麼我在ASP.NET MVC中出現這個錯誤?

傳遞到字典的模型產品類型「EventManagmentSystem.Models.RegisterPageModelViewModel」的,但這種字典需要類型的模型項目「EventManagmentSystem.Models.RegisterViewModel」。

控制器:

namespace EventManagmentSystem.Controllers 
{ 
    public class CustomerController : Controller 
    { 
     // GET: Customer 
     public ActionResult Index() 
     { 
      return View(); 
     } 
     public ActionResult Register(RegisterPageModelViewModel rm) 
     { 
      if(ModelState.IsValid) 
      { 

       RegistrationPageModel rp = new RegistrationPageModel 
       { 
        C_Name = rm.C_Name, 
        C_Password = rm.C_Password 
       }; 
      } 

      return View(rm); 
     } 
    } 
} 

瀏覽

RegisterPageModelViewModel.cshtml:

@model EventManagmentSystem.Models.RegisterPageModelViewModel 

@using (Html.BeginForm("Register", "Customer",FormMethod.Post, new { @class = "form-inline", role = "form" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>RegisterPageModelViewModel</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.C_Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.C_Name, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.C_Name, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

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

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

Register.cshtml:

@model EventManagmentSystem.Models.RegisterViewModel 

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

    <div class="form-horizontal"> 
     <h4>RegisterViewModel</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

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

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

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

模式

RegisterPageModelViewModel.cs:

namespace EventManagmentSystem.Models 
{ 
    public class RegisterPageModelViewModel 
    { 
     [Required(ErrorMessage = "Name is Required")] 
     public string C_Name { get; set; } 

     [Required(ErrorMessage = "Password is Required")] 
     public string C_Password { get; set; } 
    } 
} 

RegistrationPageModel.cs:

namespace EventManagmentSystem.Models 
{ 
    public class RegistrationPageModel 
    { 
     public int C_ID { get; set; } 
     public string C_Name { get; set; } 
     public string C_Password { get; set; } 
     public string C_Gender { get; set; } 
    } 
} 

回答

0

檢查哪些視圖應該由註冊在控制器返回。現在它返回Register.cshtml視圖和型號RegisterPageModelViewModel。但Register.cshtml需要型號RegisterViewModel,你有這個錯誤。

取決於你需要做什麼用RegisterViewModel改變模型的類型。可能是這樣的:

public ActionResult Register(RegisterPageModelViewModel rm) 
{   
    ... 
    RegisterViewModel model = new RegisterViewModel{...}; 
    return View(model); 
} 

或更改視圖是如下:

public ActionResult Register(RegisterPageModelViewModel rm) 
{   
    ... 
    return View("RegisterPageModelViewModel", rm); 
} 
相關問題