将 Razor Form 数据作为模型从带有 ajax 的引导模式传递回 C# 控制器方法

Posted

技术标签:

【中文标题】将 Razor Form 数据作为模型从带有 ajax 的引导模式传递回 C# 控制器方法【英文标题】:Pass Razor Form data back to C# controller method as Model from bootstrap modal with ajax 【发布时间】:2018-07-10 15:33:44 【问题描述】:

好的,所以我有一个控制器方法定义为:

    [WebMethod]
    public bool ModalCreate([Bind(Include = "LastName,FirstName,EmailAddress,PhoneNumber,CustomerID,VendorID")] Person person)
    
        try
        
            if (ModelState.IsValid)
            
                db.CorrActionPerson.Add(person);
                db.SaveChanges();
                return true;
            
        
        catch (Exception ex)
        
            ModelState.Merge(globalUtils.HandleExceptions(ex));
        

        // do stuff...

        return false;
    

而且我还有一个 AJAX 方法,我想用它来将用户从引导模式框发回。我正在使用实体框架 6 和 MVC 5。

这是我为 AJAX 尝试过的:

    let objModalForm = $('#newPersonModal form');

    let person = objModalForm.serializeArray();

    $.ajax(
        url: urlPrefix + '/Quality/CorrAction/Person/ModalCreate',
        data:  person: person ,
        async: false
    ).done(function (data) 
        if (data === 'True') 
            //do other stuff
        
    );

【问题讨论】:

有什么不工作吗?你有什么问题? WebMethod 属性必须用于static 方法。 问题是我可以让它返回到控制器方法,但它是空的...... 【参考方案1】:

您的评论说控制器方法,因此不需要[WebMethod] 属性。尝试将 AJAX 请求的数据属性更改为:

data: person,

MVC匹配Person类的属性,但是“person”的参数名没有意义。传过来的数据也需要是类,而不是数组,所以也尽量用serialize()方法代替:

//let person = objModalForm.serializeArray();
let person = objModalForm.serialize();

【讨论】:

非常感谢!这让我启动并运行!

以上是关于将 Razor Form 数据作为模型从带有 ajax 的引导模式传递回 C# 控制器方法的主要内容,如果未能解决你的问题,请参考以下文章

从模型中的嵌套对象获取 MVC4/Razor 中 JavaScript 的元素 id

无法访问 Razor 页面中的模型项目

使用 Razor Pages,在用户从下拉列表中选择父级后,如何将相关数据加载到 div?

ASP.NET Core 2.1 Razor 页面返回带有模型的页面

从 multipart/form-data 接收带有 servicestack 的文件

如何在模型绑定中使用带有 Laravel 的复选框组