You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AJAX提交乌尔都语数据至ASP.NET MVC控制器时字段为空的问题求助

解决MVC中AJAX提交乌尔都语字段为空的问题

首先,我完全理解你遇到的困扰:前端用AJAX提交数据时,除了乌尔都语字段外其他数据都能正常传到Controller,唯独这个字段始终为空,而切换到表单提交就一切正常。这并不是说不能直接发送乌尔都语数据,大概率是编码配置、AJAX参数匹配或者模型绑定的细节问题导致的,下面来一步步拆解分析:

可能的原因

  1. 参数名大小写不匹配:你前端AJAX里传的是'Urdu_Description': urduDescription,但模型类的属性是urdu_Description(首字母小写)。虽然MVC模型绑定默认大小写不敏感,但AJAX的默认序列化逻辑偶尔会出现匹配偏差。
  2. AJAX请求的编码缺失:默认的application/x-www-form-urlencoded编码在处理非ASCII字符(比如乌尔都语)时,如果没有明确指定UTF-8字符集,可能会导致数据在传输过程中丢失或乱码,最终绑定为空。
  3. 未明确设置请求内容类型:jQuery的AJAX POST请求如果不指定contentType,会默认使用application/x-www-form-urlencoded; charset=UTF-8,但如果服务器端的编码配置没跟上,也会出现解析失败的情况。

可行的解决方案

方案一:修复AJAX请求配置(无需改用表单提交)

你可以调整AJAX的参数配置,确保编码和参数匹配正确:

function SaveConfig() { 
    alert(urdumessage) 
    $.ajax({ 
        url: '@Url.Action("UrduTemp", "Setup")', 
        type: 'POST', 
        // 明确指定内容类型为UTF-8编码,确保非ASCII字符正确传输
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
        data: { 
            'Id': Id, 
            'Description': Description, 
            // 让参数名和模型属性名完全一致,改为小写开头
            'urdu_Description': urduDescription, 
            'CategoryId': CategoryId, 
        }, 
        dataType: 'json', 
        success: function (data) { }, 
        error: function (request, error) { } 
    }); 
}

同时,建议直接使用模型绑定获取数据,而非通过Request["urduDescription"](Request取的是表单键名,和模型属性名可能存在差异):

public ActionResult UrduTemp(UpdateConfig Data) { 
    try { 
        // 直接从绑定好的模型中获取乌尔都语内容
        var urduContent = Data.urdu_Description;
        var resp= push.UpdateConfiguration(Data, LoginId); 
        return Json(new { Success = true });
    } catch (Exception ex) { 
        return Json(new { ErrorCode = "-99", Users = "Error : "+ ex.Message }); 
    } 
}

方案二:沿用表单提交(已验证有效的方法)

表单提交会自动处理编码问题,尤其是当你在页面<head>里设置了<meta charset="UTF-8">时,表单会以UTF-8编码提交所有数据,包括乌尔都语字符,服务器端能直接正确解析并绑定到模型。

额外建议:确保服务器端编码配置正确

在Web.config中添加或确认以下配置,保证服务器端全程支持UTF-8编码:

<system.web>
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>

总结

完全不需要把乌尔都语转为十六进制再发送,只要确保请求编码正确、参数名和模型属性匹配,同时服务器端配置了正确的编码,就可以直接将乌尔都语数据发送到Controller。你用表单提交解决问题,本质也是利用了表单默认的UTF-8编码和更稳定的参数绑定逻辑。

内容的提问来源于stack exchange,提问作者Apire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:37:37