【发布时间】:2015-08-26 13:58:23
【问题描述】:
这是我现在第二次发生这种情况,我不知道发生了什么。我有一个 MVC 视图,它是强类型的,并由控制器使用:
public ActionResult EditSubscription (String subName){
DutiesWeb.Models.EditSubscriptionViewModel mod = new Models.EditSubscriptionViewModel(subName);
return View("EditSubscription", mod);
}
然后一切都在编辑页面上显示正常:
@model DutiesWeb.Models.EditSubscriptionViewModel
@{
ViewBag.Title = "EditSubscription";
}
<h2>EditSubscription</h2>
@using (Html.BeginForm("EditSubscriptionSubmitAction","Home", FormMethod.Post )) {
<div class="form-horizontal">
<div class="form-group">
<div class="col-lg-12">
</div>
</div>
<div class="form-group">
<div class="col-lg-2">
@Html.LabelFor(model => model.subscription.subscriptionName, new { @class = "control-label" })
</div>
<div class="col-lg-10">
@Html.TextBoxFor(model => model.subscription.subscriptionName, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-lg-2">
@Html.LabelFor(model => model.subscription.messageCount, new { @class = "control-label" })
</div>
<div class="col-lg-10">
@Html.TextBoxFor(model => model.subscription.messageCount, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-lg-2">
@Html.LabelFor(model => model.subscription.lastAccessed, new { @class = "control-label" })
</div>
<div class="col-lg-10">
@Html.TextBoxFor(model => model.subscription.lastAccessed, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-md-2">
@Html.LabelFor(model => model.subscription.status, new { @class = "control-label" })
</div>
<div class="col-md-10">
@Html.DropDownListFor(model => model.subscription.status,
(IEnumerable<SelectListItem>)Model.subscriptionActiveOptions,
"Please Select ...", new { @class = "form-control", @id = "ddlSubscriptionActive" })
@Html.ValidationMessageFor(model => model.subscription.status)
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<input type="submit" value="Save Changes" class="btn btn-primary" />
<input type="button" value="Delete" class="btn btn-danger" />
</div>
</div>
</div>} <!--Yes, I have remembered the closing bracket-->
但是,每当我尝试使用“保存更改”按钮(或我在页面上放置的任何其他提交按钮)提交表单时,我都会收到一个令人讨厌的 IIS 黄白错误:
No parameterless constructor defined for this object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.
就好像 View 忘记了它已经被赋予了一个模型,因为它显然是在寻找带有签名的控制器中调用一个方法
public ActionResult EditSubscriptionSubmitAction(){}
而不是
public ActionResult EditSubscriptionSubmitAction (DutiesWeb.Models.EditSubscriptionViewModel model) {}
我不知道为什么。有人有什么想法吗?
【问题讨论】:
-
感谢 Stephen Muecke 和 Ric,问题现已解决。我以前没有听说过“必须有无参数构造函数”约束,但仔细想想,它确实很有意义。由于对 GetInstance() 的引用,给了斯蒂芬的功劳,但任何一个答案都应该得到道具,因为它们都帮助我解决了问题。感谢您的宝贵时间。
-
还有另一种方法可以解决这个问题,它是创建一个自定义模型绑定器,看看它,很高兴答案有帮助。
标签: c# asp.net-mvc