0

我的服务器上有以下课程:

public class JsonDialog
{
    public IEnumerable<string> Errors { set; get; }
    public string Modified { set; get; }
    public string ModifiedBy { get; set; }
    public string PartitionKey { set; get; }
    public string PartitionKeyNew { set; get; }
    public string RowKey { get; set; }
    public string RowKeyNew { get; set; }
    public bool Success { set; get; }
}

在我的 MVC 操作方法中,我返回一个 JsonResult:

                return Json(new JsonDialog
                {
                    Success = false,
                    Errors = errors
                });

在我的客户端代码中,我有以下内容:

    $.ajax({
        url: href,
        dataType: 'json',
        type: 'POST',
        data: $form.serializeArray()
        })
        .done(onDone)
        .fail(onFail);


var onDone = function (json, textStatus, XMLHttpRequest) {
    json = json || {};
    if (json.Success) {

因为我在服务器上使用了一个类,所以编译器会检查以确保我不会犯任何拼写错误,例如它不允许我输入“success = false”。但是在客户端上没有检查,我可以编写 json.sUccEss 代码,它仍然可以,但它不会给我想要的结果。

Javascript中是否有任何方法可以像在服务器上一样进行一些错误检查?诸如将数据放入类并让 IDE 检查类字段是否正确之类的事情?

4

3 回答 3

0

也许有很好的文本编辑器可以帮助你,但是 Javascript 没有这样的东西。

像 TextSublime 这样的编辑器可以伪造代码内省并提供文件搜索以帮助输入相同的名称。

像 Eclipse 或 Netbeans 这样的 IDE 做得更好,但离你想要的还很远。Javascript 不是像 Java 或 C# 那样的强类型语言(如果我们可以说它们是……),所以你不会找到 VS 和 C# 所拥有的所有那些糖果特性。

这就是NetBeans 所做的,但并不像您希望的那样先进。

于 2012-09-17T16:25:14.957 回答
0

可能有工具,但如果你可以通过以下方式实现:

在控制器中,您呈现部分视图而不是 json 结果并在其上传递类对象,然后在该视图上您必须编写 objcetName.PropertyName 并且您会检查它。

于 2012-09-17T16:45:40.187 回答
0

我(部分)通过在 JS 中创建一个匹配对象来解决这个问题,我称之为“工厂”方法(但如果你使用这里提到的“工厂”一词,那就用词不当了。它真的更相似'casting',但由于 JS 没有强类型,这也不完全正确。

显然,如果你所做的只是试图让智能感知工作,那么这个代码模式也非常冗长,但是如果你在 JS 端对象上有方法......我们会虚构地说:JsonResult.prototype.markErrorsReviewed......那么这个模式你获取给定“类”的实例很有帮助。

为简洁起见,我将仅使用您的 C# 类作为我的 JS 的基础:

var JsonResult = function () {
    this.Errors = [];
    this.Modified = null;
    this.ModifiedBy = null;
    //...rest of your properties, defaulted as necessary
}

JsonResult.factory = function (o) {
    var j = new JsonResult();
    $.extend(j, o);
    //do other processing here if needed (for example, ASP.NET serializes DateTime retardedly)
    return j;
}

阿贾克斯

$.ajax({
    success: function(json, status, xhr) {
        var myobj = JsonResult.factory(json);
        //VS2010 will now give you intellisense w/ proper property names on myobj
        //Note: it's still buggy and sometimes won't detect things properly, but it usually works
    }
});
于 2012-09-17T16:49:32.323 回答