为什么我在 MVC ASP.NET 出现此错误



错误

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

模型

注册页面模型视图模型.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; }
    }
}

注册页面型号.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);
}

相关内容

  • 没有找到相关文章

最新更新