为什么我在ASP.NET MVC中出现这个错误?

问题描述:

错误为什么我在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; } 
    } 
} 

检查哪些视图应该由注册在控制器返回。现在它返回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); 
}