首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于Ajax加载的部分参数的ModelState.AddModelError

用于Ajax加载的部分参数的ModelState.AddModelError
EN

Stack Overflow用户
提问于 2020-11-26 16:14:41
回答 1查看 22关注 0票数 0

我在我的主页上有一个加载表单的局部视图,模型如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CreateRequestViewModel
    {
        [Required]
        public short ClientId { get; set; }
        [Required]
        public Guid SystemId { get; set; }

        [Required]
        public string RequestedUsername { get; set; }
        public string TicketReference { get; set; }
        public string Notes { get; set; }

        public List<SelectListItem> Clients { get; set; }
        public List<SelectListItem> Systems { get; set; }
    }

这是局部视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@model Models.CreateRequestViewModel

@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })

<div class="row">
    <div class="col-lg-4 col-md-4 col-sm-12">
        <h1>Create a Request</h1>
    </div>
    <div class="col-lg-8 col-md-8 col-sm-12 right">
        <div class="form-group">
            @Html.DropDownListFor(m => m.ClientId, Model.Clients, htmlAttributes: new { @class = "form-control form-control-lg", @id = "ClientSelect" })
            @Html.ValidationMessageFor(m => m.ClientId, "", htmlAttributes: new { @class = "text-danger" })
        </div>
        <div class="form-group">
            @Html.DropDownListFor(m => m.SystemId, Model.Systems, htmlAttributes: new { @class = "form-control form-control-lg", @id = "ClientSystemSelect" })
            @Html.ValidationMessageFor(m => m.SystemId, "", htmlAttributes: new { @class = "text-danger" })
        </div>
        <div class="form-group">
            @Html.TextBoxFor(m => m.RequestedUsername, htmlAttributes: new { @class = "form-control form-control-lg", @placeholder = "Username" })
            @Html.ValidationMessageFor(m => m.RequestedUsername, "", htmlAttributes: new { @class = "text-danger" })
        </div>
        <div class="form-group">
            @Html.TextBoxFor(m => m.TicketReference, htmlAttributes: new { @class = "form-control form-control-lg", @placeholder = "Ticket reference" })
        </div>
        <div class="form-group">
            @Html.TextAreaFor(m => m.Notes, htmlAttributes: new { @class = "form-control form-control-lg", @rows = 3, @placeholder = "Notes..." })
        </div>
        <input type="Submit" class="btn btn-secondary btn-block send-request" value="Submit" name="">
    </div>
</div>

这是我加载页面的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="container">
    <div class="row">
        <div class="col-lg-6">
            <form asp-action="CreateRequest" asp-controller="Access"
                data-ajax="true"
                data-ajax-method="POST"
                data-ajax-mode="replace"
                data-ajax-update="#createRequest">
                <div id="createRequest">
                    @await Html.PartialAsync("_CreateRequest", Model.CreateRequestModel)
                </div>
            </form>
        </div>
    </div>
</div>

使用模型并使用不显眼的javascript,例如,将RequestedUsername留空将导致表单不被提交,并为其显示验证消息。这太棒了。

但是,我需要首先根据数据库中的条目检查表单数据,如果存在记录,则抛出错误。我认为,随着所有客户端验证的通过,我应该在控制器中使用ModelState.AddModelError,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreateRequest(CreateRequestViewModel model)
{
    if(model.RequestedUsername == "someincorrectvalue"){ //actual logic removed for brevity
        ModelState.AddModelError("RequestedUsername", "Already in use");
    }

    if(!ModelState.IsValid)
    {
        //reset lists on model, removed
        return PartialView("_CreateRequest", model);
    }

    _logger.LogInformation("CreateRequest successful");

    return RedirectToAction(nameof(Index));
}

但是,如果我使用ModelState.AddModelError,return PartialView("_CreateRequest", model)调用最终会重新加载整个页面,就像它返回一个完整视图一样。

我不知道为什么会发生这样的事情。我能看到的不同之处在于,我在控制器中添加了一个ModelState错误,而验证发生在客户端。

有谁有主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-26 18:54:21

所以,这被证明是一系列问题的组合。首先,我在解决方案中使用的不显眼的Ajax脚本无法运行。我不知道为什么,但我把它们换成了CDN中的一个:https://ajax.aspnetcdn.com/ajax/jquery.unobtrusive-ajax/3.2.5/jquery.unobtrusive-ajax.min.js

这解决了整个页面重新加载的问题,而不是通过低调的ajax返回部分页面。

第二个问题是,在成功时,我重定向到Index控制器操作,而不是再次返回Partial。这会导致整个Index页面呈现在我选择作为ajax目标的div中。我的控制器操作现在看起来像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreateRequest(CreateRequestViewModel model)
{
    if(model.RequestedUsername == "someincorrectvalue"){ //actual logic removed for brevity
        ModelState.AddModelError("RequestedUsername", "Already in use");
    }

    if(!ModelState.IsValid)
    {
        //reset lists on model, removed
        return PartialView("_CreateRequest", model);
    }

    _logger.LogInformation("CreateRequest successful");

    // reset lists on model, removed
    ModelState.Clear(); // get rid ofany model details to make way for a new request
    return PartialView("_CreateRequest", model);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65025663

复制
相关文章
python 中的scipy模块
https://docs.scipy.org/doc/scipy-0.18.0/reference/ (参考链接) Python 中常用的统计工具有 Numpy, Pandas, PyMC, Sta
润森
2019/08/29
2.2K0
python 中的scipy模块
python中的scipy模块
scipy包含致力于科学计算中常见问题的各个工具箱。它的不同子模块相应于不同的应用。像插值,积分,优化,图像处理,统计,特殊函数等等。
狼啸风云
2019/08/31
5.5K0
2020-10-22标准正态分布表(scipy.stats)
Φ − 1 ( x ) \Phi^{-1}(x)Φ−1(x),通过 norm(x) 进行计算:
爱笑的架构师
2020/10/28
2K0
2020-10-22标准正态分布表(scipy.stats)
【说站】python正态分布中的normal函数
在金融学研究中,收益率等变量的分布假定为正态分布或者对数正态分布(取对数后服从正态分布)。因为形状的原因,正态分布曲线也被经常称为钟形曲线。
很酷的站长
2022/11/24
8310
【说站】python正态分布中的normal函数
MySQL 8.0.21中UNDO截断的改进
UNDO表空间可以在MySQL 8.0中隐式或显式截断。两种方法使用相同的机制。当UNDO表空间截断完成时,可能导致非常繁忙的系统上的定期停顿。此问题已在MySQL 8.0.21中修复。
MySQLSE
2020/09/28
1.3K0
普通正态分布如何转换到标准正态分布中_正态分布化成标准正态的公式
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步
全栈程序员站长
2022/11/08
5.9K0
普通正态分布如何转换到标准正态分布中_正态分布化成标准正态的公式
python3-正态分布
loc 平均值 scale (scale) 标准差 pdf(x, loc=0, scale=1)
py3study
2020/01/06
1.8K0
标准正态分布的分布函数服从均匀分布_python 正态分布
一个分布的随机变量可通过把服从(0,1)均匀分布的随机变量代入该分布的反函数的方法得到。标准正态分布的反函数却求不了。所以我们就要寻找其他的办法。
全栈程序员站长
2022/11/17
1.2K0
标准正态分布的分布函数服从均匀分布_python 正态分布
python scipy库_micropython移植
文档中说明了在scipy的0.19.0版本和1.0.0版本中可以用到的imread,imresize函数在scipy的1.3.0版本中全部被遗弃。
全栈程序员站长
2022/11/04
5590
python 生成呈正态分布序列
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
2.1K0
Python中的统计假设检验速查表
本文是一个机器学习项目中最流行的统计假设检验的速查表,包含使用Python接口的示例。
AiTechYun
2018/09/26
2.2K0
Python中的统计假设检验速查表
图表中异常值的特殊截断处理
相信大家都遇到过这种情况 用一组数据作图 可是偏偏就遇到那么一两个特变态的异常值 不信自己感受一下 其中有一个700的特大值 导致整个图表其他数值之间 因为差异相对太小而无法比较 遇到这种情况怎么办呢
数据小磨坊
2018/04/10
2.7K0
图表中异常值的特殊截断处理
给python安装numpy+scipy+sklearn
本文介绍了在Windows系统下,如何安装Python,Numpy,Scipy和Sklearn这些Python第三方库。首先介绍了Python的安装,然后分别介绍了Numpy,Scipy和Sklearn的安装步骤。最后总结说,要安装这些库,需要先安装Python,并且要注意版本兼容性问题。在安装这些库之后,可以方便地使用Python进行科学计算,包括线性代数、傅里叶变换、机器学习等。
TeeyoHuang
2017/12/28
1.9K0
给python安装numpy+scipy+sklearn
【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】
norm.rvs通过loc和scale参数可以指定随机变量的偏移和缩放参数,这里对应的是正态分布的期望和标准差。size得到随机数数组的形状参数。(也可以使用np.random.normal(loc=0.0, scale=1.0, size=None))
汀丶人工智能
2022/12/21
1.8K0
【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】
python的tkinter模块的导入_numpy scipy
在python项目使用cxfreeze进行打包的时候,如果 脚本里包括numpy的引用时,在打包时会报
全栈程序员站长
2022/09/28
1.3K0
python的tkinter模块的导入_numpy scipy
Python扩展库scipy中值滤波算法的应用
中值滤波是数字信号处理、数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值。下面的代码演示了scipy库中signal模块的中值滤波算法的用法。 >>> import random >>> import numpy as np >>> import scipy.signal as signal >>> x = np.arange(0,100,10) >>> random.shuffle(x) #打乱顺序 >>> x array([40, 0, 6
Python小屋屋主
2018/04/16
2.9K0
Python扩展库scipy中值滤波算法的应用
用Python学分析 - 正态分布
表头的横向表示小数点后第二位,表头的纵向则为整数部分以及小数点后第一位;两者联合作为完整的x,坐标轴的横轴
py3study
2020/01/19
9010
如何知道一个变量的分布是否为高斯分布?
“你的输入变量/特征必须是高斯分布的”是一些机器学习模型(特别是线性模型)的要求。但我怎么知道变量的分布是高斯分布呢。本文重点介绍了保证变量分布为高斯分布的几种方法。
deephub
2021/03/10
1.7K0
如何知道一个变量的分布是否为高斯分布?
python3-scipy-ndimage平滑
在python3的scipy ndimage模块提供了一个名为percentile_filter()的函数,它是中值滤波器的一个通用版本。
用户6599049
2022/06/25
6900
[开发技巧]·Python实现信号滤波(基于scipy)
在深度学习中,有时会使用Matlab进行滤波处理,再将处理过的数据送入神经网络中。这样是一般的处理方法,但是处理起来却有些繁琐,并且有时系统难以运行Matlab。Python作为一种十分强大的语言,是支持信号滤波滤波处理的。
小宋是呢
2019/06/27
10.1K0
[开发技巧]·Python实现信号滤波(基于scipy)

相似问题

截断正态分布Python/Pandas

20

Python无法拟合正态分布。scipy包缺陷?

127

scipy kstest,用于scipy对数正态分布

118

具有R,随机值的对数正态分布截断分布

11

绘制截断正态分布

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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