我想用 knockout.js 和 MVC 4 创建一个单页网站。
进行一些更改后,用户将单击针对 Controller Save
操作的保存按钮。
Controller 端我想验证输入数据。
如果数据有效 - 我需要调用 WCF 方法。
如果数据无效 - 我会向客户端返回一些内容并告诉他们“名字太长”之类的内容。
制作这样的东西很简单:
- 使用 DataAnnotations 声明
SiteModel
- 声明 Controller 操作
public JsonResult Save(SiteModel data)
- 如果模型有效则创建 WCF DataContract 的新实例并调用 WCF 方法
代码:
public JsonResult Save(SiteModel data)
{
if (ModelState.IsValid)
{
var ui = WcfUserInfo{FirstName = data.FirstName};
if(wcfclient.wcfmethod(ui))
return Json("IsValid");
}
return Json("IsNotValid");
}
是否可以使用 DataAnnotations 创建 DataContract 并在 Save
方法中使用此 DataContract,类似于 public JsonResult Save(WcfDataContract data)
?
我只是不想创建和支持两个具有相同数据的不同类:一个 MVC 模型和一个 WCF DataContract。
谢谢。
更新:
这 2 个帖子解决了我的问题。
Send objects with custom attributes via a wcf service
How to make WCF client use the same data types as the WCF service
最佳答案
我知道这不是您想听到的,但我再怎么强调也不为过: 您与服务的数据契约和您的 View 模型(您的 JSON 表示)不应该相同。它们是不同的问题,尽管现在感觉不像那样。
鉴于此,是什么阻止您简单地将 SiteModel
替换为 WcfUserInfo
(如果它们相同(即具有相同的属性))?
附言。如果您使用 AutoMapper,则不必自己进行映射,AutoMapper 将通过两行代码为您处理:一行用于配置 map ,另一行用于执行映射。
关于wcf - 如何在一处声明 MVC 模型和 WCF DataContract?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18855085/