这是我的模特:
namespace MvcApplication2.Models
{
public class CreditCard
{
[CreditCard(ErrorMessageResourceType = typeof(Messages), ErrorMessageResourceName = "CardNumberInvalid")]
public string CardNumber { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Messages.resx:
名称值
CardNumberInvalid检查您的卡号是否正确
这是我的观点:
@model MvcApplication2.Models.CreditCard
@Html.TextBoxFor(m => m.CardNumber);
Run Code Online (Sandbox Code Playgroud)
在MVC版本3中,这可以正常工作.在MVC 4中,当我转到此页面时,我得到一个表示"必须设置ErrorMessageString或ErrorMessageResourceName,但不能同时设置两者"的删除操作.这只发生在CreditCardAttribute上.其他验证属性(如RequiredAttribute)工作正常.我只设置了ErrorMessageResourceName.我没有设置ErrorMessageString,所以不明白我做错了什么.有人可以帮忙吗?
我已将WCF服务升级到.NET Framework 4.5.这样做之后,我注意到IMetaDataExchange主机配置文件中有一条蓝色波浪线.
这就是配置的服务部分:
<services>
<service behaviorConfiguration="MyBehavior" name="MyServiceHost">
<endpoint binding="wsHttpBinding" bindingConfiguration="noSecurityBinding" contract="MyServiceContract"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停IMetadataExchange在错误上时说:
'contract'属性无效 - 值'IMetadataExchange'根据其数据类型'serviceContractType'无效 - Enumeration约束失败.
该服务似乎工作正常.所以我很好奇为什么这是无效的.
我已将MVC站点升级到MVC版本4.0,.NET Framewrok版本4.5.执行此操作后,我从我的视图中收到运行时错误:
方法Microsoft.Web.Mvc.LinkExtensions.ActionLink:类型参数'ContactCentre.Controllers.LogOnController'违反了类型参数'TController'的约束.
以下是抛出异常的代码:
Url.Action<LogOnController>(c => c.LogOff())
Run Code Online (Sandbox Code Playgroud)
Constraint TController检查类型是Controller类型.我的控制器LogOnController继承自Controller,因此符合约束.
我认为问题在于我的库Microsoft.Web.Mvc版本.这是运行时版本v4.0.30319,版本3.0.0.0.我认为这意味着它的目标是MVC版本3.
是否有MVC版本4兼容的Microsoft.Web.Mvc版本?还是我在错误的树上吠叫?欢迎任何帮助.