为什么我在ASP.NET MVC中收到此错误?

时间:2016-11-13 12:51:54

标签: asp.net-mvc viewmodel

错误

  

传递到字典中的模型项的类型为“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; }
    }
}

1 个答案:

答案 0 :(得分: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);
}