【问题标题】:Knockout failing to post a form, can't figure out why淘汰赛未能发布表格,无法弄清楚原因
【发布时间】:2014-05-23 13:31:16
【问题描述】:

我正在用 ASP.NET MVC 和 API 开发一个页面,使用 Knockout,Typescript,代码如下:JSFiddler

服务器代码:

// POST: api/Empresas
    [ResponseType(typeof(Business))]
    public async Task<IHttpActionResult> PostBusiness(Business business)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.Businesses.Add(business);
        await db.SaveChangesAsync();

        return CreatedAtRoute("DefaultApi", new { id = business.Id }, business);
    }

业务对象:

public class Business
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [ScaffoldColumn(false)]
    public Guid Id { get; set; }
    [Display(Name = "CNPJ", Description = "Cadastro Nacional de Pessoa Juridica")]
    public string CNPJ { get; set; }
    [Display(Name = "Nome", Description = "Razão Social")]
    public string Name { get; set; }
    [Display(Name = "Limite Mensal", Description = "Limite mensal de uso")]
    public int MonthlyLimit { get; set; }
    [Display(Name = "Mensal Atual", Description = "Uso Mensal Atual")]
    public int MonthlyCurrent { get; set; }
    [Display(Name = "Inicio Assinatura", Description = "Data inicial da assinatura")]
    public DateTime SubscriptionStart { get; set; }
    [Display(Name = "Meses Contratados", Description = "Numero de meses contratados")]
    public int MonthContractCount { get; set; }
}

该示例无法运行,因为没有要测试的端点。 我的第一个问题是为什么数据绑定不能为此工作? 其次也是最重要的,我不断收到以下错误消息:


来自网页的消息

[对象对象] 解析器错误

SyntaxError: Invalid character - 未能创建业务

好的

我不知道为什么会这样,我已经成功地对代码进行了多次更改。有什么想法吗?

我使用的值: CNPJ = 123.321.321-25 名称 = 测试业务 每月限额 = 20000 订阅开始 = 01/01/2014 monthContractCount = 24

提前致谢

编辑:

createBusiness = (formElement) => {}

我将方法上的签名更改为如上所示,试图用“this”关键字解决范围问题。不过还是不行。

新编辑:

createBusiness = (formElement) => {
        $(formElement).validate();
        if ($(formElement).valid()) {
            var formserialized = $(formElement).serialize();
            $.post('/Api/Empresas/', formserialized, null, "json")
                .done((result) => {
                    this.Business.Id = result.Id;
                    this.Business.Name(result.Name);
                    this.Business.CNPJ(result.CNPJ);
                    this.Business.MonthlyLimit(result.MonthlyLimit);
                    this.Business.SubscriptionStart(result.SubscriptionStart);
                    this.Business.MonthContractCount(result.MonthContractCount);
                    this.Business.MonthlyCurrent(result.MonthlyCurrent);
                })
                .fail((x, y, z) => {
                    alert(x + '\n' + y + '\n' + z + ' - failed to create business');
                });
        };
    }

这是最后一次更改,现在可以使用,但正如您所见,我必须将 this.BaseUri 更改为 '/Api/Empresas/' 由于“this”的范围,此更改是必要的,所以这是一个修复,但不是真的。有什么想法吗?

【问题讨论】:

    标签: javascript asp.net knockout.js typescript


    【解决方案1】:

    改变

    var formserialized = $(formElement).serialize();
    

    var formserialized = JSON.stringify($(formElement).serialize());
    

    【讨论】:

    • 您能向我们展示您请求中的 JSON 吗?这可以使用 Chrome 的开发工具(网络选项卡)检索
    • 这是建议后请求正文的内容:"cnpj=123.321.123-58&name=Test+Business&monthlyLimit=20000&SubscriptionStart=01%2F01%2F2014&monthContractCount=24"
    • 看起来范围有问题,使用“this”,我确实按照上面的编辑更改了代码。
    • 好吧,请求体不是合法的JSON,把上面那行改成var formserialized = JSON.stringify($(formElement).serializeArray()); jquery serializearray api
    • 这是生成的 json,它没有正确反序列化为上面的对象(导致 500)。 [{"name":"cnpj","value":"123.321.123-35"},{"name":"name","value":"Test Empresa"},{"name":"monthlyLimit" ,"value":"20000"},{"name":"SubscriptionStart","value":"01/01/2014"},{"name":"monthContractCount","value":"24"}]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    相关资源
    最近更新 更多