首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Json post到asp.net核心剃须刀页面模型返回空

Json post到asp.net核心剃须刀页面模型返回空
EN

Stack Overflow用户
提问于 2020-10-21 19:14:50
回答 1查看 321关注 0票数 0

尝试了大量的解决方案,并在网上修复,但没有进展,做了调查研究,我需要你们的帮助,伙计们。

这是我的Js脚本,用于将学生成绩推送到页面模型,当我检查学生成绩时,它有值。

代码语言:javascript
运行
AI代码解释
复制
<script>
if (btnTakeScore) {
    btnTakeScore.onclick = function (e) {
        e.preventDefault();

        var rows = document.querySelectorAll('tbody tr');
        let studentScores = [];
        for (let i = 0; i < rows.length; i++) {
            let studentId = rows[i].getAttribute('studentId');

            studentScores.push({
                studentId: studentId,
                sessionId: cboSession.value,
                termId: cboTerms.value,
                classId: cboClass.value,
                subjectScores: []
            })

            let tds = rows[i].querySelectorAll('td input[type="number"]');
            for (let j = 0; j < tds.length; j++) {

                // Simulate missing score instead of a 0;
                let ctrl = tds[j];
                if (ctrl.value !== '') {

                    studentScores[i].subjectScores.push({
                        studentId: studentId,
                        subjectId: tds[j].getAttribute('subjectId'),
                        score: ctrl.value,
                        scoreTypeId: cboScoreType.value
                    });
                }
            }
        }

        // call server here to post the data
        //const serverUrl = 'https://localhost:44301/api/SaveStudentScores';
        const serverUrl = '@Url.Page("/Teacher/StudentScore")?handler=SaveScore';
        let r = new XMLHttpRequest();
        r.open('post', serverUrl);
        r.setRequestHeader('content-Type', 'application/json');
        r.setRequestHeader("XSRF-TOKEN",
                        $('input:hidden[name="__RequestVerificationToken"]').val());
        r.send(JSON.stringify(studentScores));
        r.onload = function () {
            if (r.status === 200) {
                var res = JSON.parse(this.responseText);
                if (res.status === true) {
                    alert(res.message);

                    // clear the fields.
                    var inputs = document.querySelectorAll('table#scoreEntry input[type="number"]');
                    inputs.forEach(d => d.value = '0'); // reset the scores to Zero

                }
            }
        }
    }
}
<script>

这是我的PageModel OnPost。当它来到这里时,分数值变为空。

代码语言:javascript
运行
AI代码解释
复制
public async Task<JsonResult> OnPostSaveScore([FromBody]IEnumerable<StudentScoreContainer> scores)
    {
        
        try
        {
            // Code to push date to the database 
            }

            return new JsonResult(new { status = true, messsage = "Student(s) score saved!" });
        }
        catch (Exception ex)
        {
            return new JsonResult(new { status = false, message = ex.Message });
        }

    }


 public struct StudentScoreContainer
{
    public int studentId { get; set; }
    public int classId { get; set; }
    public int sessionId { get; set; }
    public int termId { get; set; }
    public int scoreTypeId { get; set; }
    public IEnumerable<SubjectScoreContainer> subjectScores { get; set; }

}


public struct SubjectScoreContainer
{
    public int studentId { get; set; }
    public int subjectId { get; set; }
    public int score { get; set; }
}

这是我的Html代码

代码语言:javascript
运行
AI代码解释
复制
<div class="card-body">
                <div class="row">
                    <div class="col-sm-2">
                        <div class="form-group">
                            <label>Class Room<span class="text-danger">* 
                           </span></label>
                            <select id="classRoom" class="select" form="searchForm" required="required" asp-items="@(new SelectList(Model.Classess, "Class.Id","Class.Name"))">
                                <option value="">Select ClassRoom</option>
                            </select>
                        </div>
                    </div>
                    <div class="col-sm-2">
                        <div class="form-group">
                            <label>Session<span class="text-danger">*</span></label>
                            <select id="session" class="select" required="required" asp-items="@(new SelectList(Model.Sessions, "Id","Name"))">
                                <option value="">Select Session</option>
                            </select>
                        </div>
                    </div>
                    <div class="col-sm-2">
                        <div class="form-group">
                            <label>Term<span class="text-danger">*</span></label>
                            <select id="term" class="select" required="required" asp-items="@(new SelectList(Model.Terms, "Id","Name"))">
                                <option value="">Select Term</option>
                            </select>
                        </div>
                    </div>
                    <div class="col-sm-2">
                        <div class="form-group">
                            <label>Score Types<span class="text-danger">*</span></label>
                            <select id="cboScoreType" class="select" required="required" asp-items="@(new SelectList(Model.ScoreTypes, "Id","Name"))">
                                <option value="">Select ScoreType</option>
                            </select>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <label></label>
                        <p></p>
                        <button id="btnSearch" type="submit" class="btn btn-success btn-block"> Search </button>
                    </div>
                </div>
                <div class="row">
                    <div class="col-lg-12">
                        <div class="table-responsive">
                           
                            <table class="table table-striped custom-table table-nowrap mb-0" id="studentList">
                                <thead>
                                    <tr>
                                        <th>Student</th>
                                        @foreach (var s in Model.SubjectsByTeacher)
                                        {
                                            <th style="text-align:center">@s.Subject.Name</th>
                                        }
                                    </tr>
                                </thead>
                                <tbody>
                                    @foreach (var student in Model.Students)
                                    {
                                        <tr studentId="@student.StudentID">
                                            <td>@(student.FirstName.Trim() + " " + student.LastName.Trim())</td>
                                            @foreach (var subject in Model.SubjectsByTeacher)
                                            {
                                                <td style="text-align:center"><input type="number" min="0" max="100" class="form-control" studentId="@student.StudentID" subjectId="@subject.Subject.Id" /></td>
                                            }
                                        </tr>
                                    }
                                </tbody>
                            </table>
                            
                            <br />
                        </div>
                    </div>
                    <div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-12">
                        <div class="form-group">
                            <button id="btnTakeScore" class="btn btn-primary">
                                <i class="fa fa-pen"></i> &nbsp; <b>Take Scores</b>
                            </button>
                        </div>
                    </div>
                </div>

            </div>

我非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 02:44:20

根据js和剃刀页面代码,我发现您直接读取getAttribute值并将其发布到页面方法中。

因为studentId和其他属性都是int类型,但是从html代码中得到的值是字符串。这就是为什么页面模型不能很好地绑定值的原因。

我建议您可以在js中将rows[i].getAttribute('studentId')转换为int。

如下所示:

因为我没有完整的js代码和pagemodel类,所以我只创建一个测试js模型来测试它。

您可以尝试按照下面的代码替换您所拥有的js代码。

studentScores:

代码语言:javascript
运行
AI代码解释
复制
studentScores.push({
    studentId: +studentId,
    sessionId: +cboSession.value,
    termId: +cboTerms.value,
    classId: +cboClass.value,
    subjectScores: []
})

subjectScores:

代码语言:javascript
运行
AI代码解释
复制
                studentScores[i].subjectScores.push({
                    studentId: +studentId,
                    subjectId: +tds[j].getAttribute('subjectId'),
                    score: +ctrl.value,
                    scoreTypeId: +cboScoreType.value
                });

作为@Joseph的评论,我们也可以使用NewtonsoftJson而不是System.Text.Json来报道这个问题。

更多细节,请参阅以下代码:

从url下面安装Microsoft.AspNetCore.Mvc.NewtonsoftJson:

https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.NewtonsoftJson

将以下代码添加到startup.cs配置服务方法中:

代码语言:javascript
运行
AI代码解释
复制
        services.AddRazorPages().AddNewtonsoftJson();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64474750

复制
相关文章
在没有 Mimikatz 的情况下操作用户密码
通过利用Mimikatz的 lsadump::setntlm和lsadump::changentlm函数,过去已经涵盖了这两个用例。虽然Mimikatz是最好的攻击工具之一,但我会尽量避免使用它,因为它是反病毒和 EDR 工具的高度目标。在这篇文章中,我将专门讨论用例 #2 — 为横向移动或权限提升重置密码。
Khan安全团队
2022/03/21
2.1K0
OpenCV 利用滚动条在不缩小的情况下显示大型图片
最近由于项目需要,要在不缩小的情况下显示一张2500*2000大小的图片,找到了一篇博客写的非常好,是邹老师写于2011年的: http://blog.csdn.net/chenyusiyuan/article/details/6565424
chaibubble
2022/05/07
7240
OpenCV 利用滚动条在不缩小的情况下显示大型图片
Sharded:在相同显存的情况下使pytorch模型的参数大小加倍
深度学习模型已被证明可以通过增加数据和参数来改善。即使使用175B参数的Open AI最新GPT-3模型,随着参数数量的增加,我们仍未看到模型达到平稳状态。
deephub
2020/12/24
1.6K0
V-3-3 在没有vCenter的情况下
在使用vSphere客户端登陆到ESXi服务器的时候,由于没有安装vCenter,而发现无法克隆虚拟机。而如果要安装vCenter的Windows版,有时候需要创建多台Windows Server主机,这种时候可以通过复制ESXi datastore里的虚拟机文件来创建多台相同的Windows Server虚拟机。
py3study
2020/01/07
1.1K0
理解JavaScript的临时包装对象
Javascript语言中的对象和基础类型string、number、boolean都可以使用“.”符号访问属性和方法,但是本质上只有对象才可以使用“.”,那么基础类型在使用“.”时的内部机制是什么呢? 这里要引入一个概念:包装对象。 Javascript对象是一个复合值,他是一组属性和方法的集合,使用“.”符号可以直接访问其属性和方法,但是基础类型数据在使用“.”符号时,*Javascript解析器首先调用基础类型对应的构造函数构建一个临时包装对象,然后再访问包装对象的属性。比如以下代码: let str
寒月十八
2018/01/30
9870
JavaScript-包装对象
(2)这7种数据类型中,对象为“引用类型”,其他六种为“原始类型”(或叫“基本类型”)。
WEBING
2019/03/13
6460
JavaScript-包装对象
在没有外链情况下,如何提高PR值?
外链是提高PR值的有利方式,但现在外链建设愈发困难,各家都对自己的网站进行链接屏蔽,即使你的外链建设成功,在代码状态下依然是Nofollow状态,所以seoer对外链格外关注。
蝙蝠侠IT
2021/03/22
5490
在没有外链情况下,如何提高PR值?
C++核心准则​Con.1:默认情况下使对象不可修改
Immutable objects are easier to reason about, so make objects non-const only when there is a need to change their value. Prevents accidental or hard-to-notice change of value.
面向对象思考
2020/08/14
4460
c语言:C语言清空输入缓冲区在标准输入(stdin)情况下的使用
分析:并没有输入字符,直接就输出了“hello bit”,因为在点击回车(‘\n’)时,相当于输入了一个字符,那么我们需要进行清空缓冲区处理
用户7886150
2021/02/14
3.1K0
JavaScript 原始值与包装对象
随着 JavaScript 越来越流行,越来越多地开发者开始接触并使用 JavaScript。
陈皮皮
2021/08/04
9600
vscode 使水平滚动条固定持续显示
1、在编辑器窗口中键盘 ctrl/command + shift + p 2、输入 setting,打开设置(json) 3、在 JSON 文件中加入以下代码:
Leophen
2022/05/07
2.5K0
在没有数据的情况下使用贝叶斯定理设计知识驱动模型
数据是模型的基础,但是没有数据只有领域专家也可以很好地描述或甚至预测给定环境的“情况”。我将根据贝叶斯概率来总结知识驱动模型的概念,然后是一个实际教程,以演示将专家的知识转换为贝叶斯模型以进行推理的步骤。我将使用 Sprinkler 系统从概念上解释过程中的步骤:从知识到模型。最后我将讨论复杂的知识驱动模型的挑战,以及由于质疑和提取知识而可能发生的系统错误。所有示例都是使用 python 的 bnlearn 库创建的。
deephub
2021/10/09
2.2K0
在没有数据的情况下使用贝叶斯定理设计知识驱动模型
用户输入括号是否匹配
public class brackets { /*算法*/ public static boolean isMatch(String str) { int i = 0; char e, x; SqStackClass<Character> st = new SqStackClass<Character>(); //建立一个顺序栈 while (i < str.length()) {
楠羽
2022/11/18
1K0
Harris角点提取后怎么匹配?
对于角点匹配算法的研究本文主要采用Harris算法提取图像中的角点,通过相似测度得到粗匹配点集,然后简单分析了两种提纯匹配点的简单聚类法和视差梯度约束法。 1. Harris算法角点检测 人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一
智能算法
2018/04/03
2.5K0
Harris角点提取后怎么匹配?
JavaScript 原始值与包装对象
随着 JavaScript 越来越流行,越来越多地开发者开始接触并使用 JavaScript。
陈皮皮
2022/03/29
9200
在没有 'try-with-resources' 语句的情况下使用 'xxx' 是什么意思
在没有使用 try-with-resources 语句的情况下使用 xxx,意味着在代码中没有显式地关闭 xxx对象资源,如果没有使用 try-with-resources,那么在使用xxx对象后,需要手动调用 close() 方法关闭xxx对象以释放资源,防止资源泄露。
高久峰
2023/09/30
4.4K0
html滚动条使用,以及页面有多个div块,如何让body页面不使用滚动条,只在某个div内使用滚动条
2,页面有多个div块,如何让body页面不使用滚动条,只在某个div内使用滚动条
全栈程序员站长
2022/08/05
4.8K0
html滚动条使用,以及页面有多个div块,如何让body页面不使用滚动条,只在某个div内使用滚动条
多个Promise对象的处理
如果某件事情需要依照多个对象完成后才能执行,那么我们可以使用Promise.all来管理,将这些状态全部执行完毕后才执行下一个!
十月梦想
2018/10/09
1.1K0
神兵利器 - 在没有任何权限的情况下破解任何 Microsoft Windows 用户密码
项目地址:https://github.com/DarkCoderSc/win-brute-logon
Khan安全团队
2022/04/02
1.7K0
神兵利器 - 在没有任何权限的情况下破解任何 Microsoft Windows 用户密码
点击加载更多

相似问题

TypeError:无法读取未定义的属性(读取“长度”)- Blockchain

11

如何使用Rust SDK在Aptos上执行移动脚本?

113

如何使用Aptos CLI执行移动脚本?

18

如何读取Blockchain数据( .dat和.ldb文件)?

10

如何在Spark Structured Streaming中读取Kafka和查询外部存储,如Cassandra?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文