![](/img/trans.png)
[英]The parameter conversion from type 'System.String' to type ''Y' failed because no type converter can convert between these types
[英]The parameter conversion from type 'System.String' to type ''X' failed because no type converter can convert between these types
我对这个感到困惑,你的帮助最有用。
我收到错误:
从类型'System.String'到类型'DataPortal.Models.EntityClasses.FeedbackComment'的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换
ModelState.IsValid
在FeedbackComment.Comment
属性上失败
有任何想法吗?
public class FeedbackComment : IFeedbackComment
{
[Key]
public int Id { get; set;}
public int FeedbackId { get; set; }
[Required(ErrorMessage = "Please enter a Comment")]
public string Comment { get; set; }
public DateTime CommentDate { get; set; }
public string CommentBy { get; set; }
}
控制器方法
//
// GET: /FeedbackComment/Create
public virtual ActionResult Create(int feedbackId)
{
var comment = new FeedbackComment {FeedbackId = feedbackId, CommentBy = User.Identity.Name, CommentDate = DateTime.Now};
return View(comment);
}
//
// POST: /FeedbackComment/Create
[HttpPost]
public virtual ActionResult Create(FeedbackComment comment)
{
if (ModelState.IsValid)
{
_feedbackCommentRepository.Add(comment);
return RedirectToAction(MVC.Feedback.Details(comment.FeedbackId));
}
return View(comment);
}
和观点
@model DataPortal.Models.EntityClasses.FeedbackComment
@{
ViewBag.Title = "Create Comment";
}
<h2>Create Comment</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Feedback Comment</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Comment)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Comment, new{@class = "TextEditor"})
@Html.ValidationMessageFor(model => model.Comment)
</div>
@Html.HiddenFor(model=> model.CommentDate)
@Html.HiddenFor(model=> model.CommentBy)
@Html.HiddenFor(model=> model.FeedbackId)
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to Comment Details", MVC.Feedback.Details(Model.FeedbackId))
</div>
问题是您的action参数的名称:
public virtual ActionResult Create(FeedbackComment comment)
这叫做comment
。 但是您的FeedbackComment
还有一个名为Comment
of type string的属性。 所以默认的模型绑定器变得疯狂。 只需重命名其中一个以避免冲突。
例如,以下内容将解决您的问题:
public virtual ActionResult Create(FeedbackComment model)
{
if (ModelState.IsValid)
{
_feedbackCommentRepository.Add(model);
return RedirectToAction(MVC.Feedback.Details(model.FeedbackId));
}
return View(model);
}
我在GET方法上的参数名称相同
[HttpGet]
public ActionResult Create(int OSSB)
..和Faturamento模型的属性,用于POST方法
[HttpPost]
public ActionResult Create(Faturamento model)
像这样..
public class Faturamento {
[Column("ID_OSSB")]
public virtual int ID_OSSB { get; set; }
[ForeignKey("ID_OSSB")]
public virtual OSSB OSSB { get; set; }
...
}
为我解决的是改变GET参数名称:
[HttpGet]
public ActionResult Create(int IDOSSB)
我有同样的错误,但原因与接受的答案不同。 添加自定义ModelBinder
为我修复了它。
我创建了一个如此处所述的CData
类
如何使用XmlSerializer将字符串序列化为CDATA? (这是最后的答案,除非它被投票,因为它是一个很好的解决方案)
我将ViewModel序列化为XML。 当我在ViewModel中的属性中将类型设置为CData
,它将自动序列化为CData部分并反序列化为CData
字段。 (太棒了!)
当我在视图中执行后期操作时,我想在ViewModel中保留一些字段,以便在表单Html.HiddenFor
它们添加为Html.HiddenFor
。
提交完成后,会发生错误(标题中的错误)。 模型绑定器尝试将字符串字段绑定到失败的CData字段。
CData
类型的自定义模型绑定器修复了此问题
public class CDataModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
return new CData(result.AttemptedValue);
}
}
Global.asax中
ModelBinders.Binders.Add(typeof(CData), new CDataModelBinder());
在我的例子中,我在Html Helper类中编写了一个模型类名。 因为它期待System.String
数据类型并且我传递了一个自定义类名,所以它失败了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.