【问题标题】:Asp.Net Core Model binding doesn't bind integer propertiesAsp.Net Core 模型绑定不绑定整数属性
【发布时间】:2022-06-11 02:37:05
【问题描述】:

我希望这将是一个简单的问题,但我尝试了很多方法,仍然得到相同的结果。我正在将一个小型 Umbraco 网站从 .Net Framework 4.8 移植到 .Net 6.0。模型绑定适用于 Framework MVC,因为我相信它比 .Net 6.0 更宽容。 问题是字符串属性绑定没问题,但整数没有绑定,并以默认的零值结束。

这是发送数据的 jQuery 代码:

function sendComment(commentObj) {
$.ajax({
    type: "POST",
    url: "/umbraco/surface/BlogSurface/HandleSubmit/",
    dataType: "json",
    contentType: "application/json",        
    data: JSON.stringify(commentObj),
    success: function (result) {

这显示了即将发送的数据(注意 blogPostId 属性):

当服务器端接收到数据并绑定到模型时,结果如下:

如您所见,BlogPostId 现在为零。 被调用的服务器端点是

[HttpPost]
//[ValidateUmbracoFormRouteString]
public async Task<IActionResult> HandleSubmit(CommentPostModel model)
{
    if (!ModelState.IsValid)
    {
        return RedirectToCurrentUmbracoPage();
    }

型号是这样的:

public class CommentPostModel
{
    [Required]
    public string AuthorName { get; set; }

    [Required]
    [EmailAddress]
    public string AuthorEmail { get; set; }

    [Required]
    [MaxLength(500)]
    public string Message { get; set; }

    public string AuthorUrl { get; set; }

    
    public int BlogPostId { get; set; }
    public int ParentId { get; set; }
    public int Level { get; set; }
}

我尝试将 [BindRequired] 属性添加到模型中的 BlogPostId 属性,但结果是相同的,只是它说模型无效。我尝试将 [FromBody] 属性添加到服务器端端点,但这会导致 415 错误,因为它坚持将数据作为 multipart/form-data 发送,即使内容类型设置为 application/json。

真的是要使用好的 'ol .Net Framework

更新: 回答提出的一些问题: 我尝试添加

[JsonPropertyName("BlogPostId")]

从 System.Text.Json.Serialization 到 BlogPostId 属性,但这并没有改变结果。

是的,上面的两个屏幕截图显示了浏览器发送的内容(使用开发工具),另一个是服务器从 ajax 调用接收的内容,显然是在模型绑定发生之后。 重复此测试并将浏览器中的其他整数值(即 parentId 和 level)分别设置为 123 和 2,结果是模型绑定后服务器上的所有整数都为零。 将 [FromBody] 添加到该方法确实会触发表单提交,尽管我想阻止表单提交并且只是通过 ajax 来完成(我想确保在提交点击时返回 true ?) 下面展示了表单提交按钮的部分视图代码:

<div class="col-md-6">
   <button class="btn btn-outline-primary btn-round mt-4" onclick="submitComment('CommentForm')">Post comment</button>
</div>

【问题讨论】:

  • 这真的很不寻常。您发布的屏幕截图是否显示了您的浏览器开发工具网络选项卡实际发送的内容?你能检查一下服务器收到的字符串的正文吗?
  • 您能分享您的查看代码吗?我猜你触发表单提交而不是ajax,当你添加[FromBody]时会导致415。
  • System.Text.Json 还是 Newtonsoft? docs.microsoft.com/en-us/dotnet/standard/serialization/…
  • 能否请您也用 parentid 和 level 进行测试?所以我们确定它是因为它们是整数

标签: c# asp.net-core model-binding umbraco9


【解决方案1】:

尝试使用 [JsonProperty] 属性 public int BlogPostId { get;放; }

示例:https://www.newtonsoft.com/json/help/html/jsonpropertyname.htm

【讨论】:

  • 啊,我在 Web API 模型中使用了 JsonProperty,但我会在这个模型上尝试一下。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多