当前位置: 首页 > 知识库问答 >
问题:

ASP.NET Core MVC-表单提交数据成功后运行客户端脚本/函数

龙俭
2023-03-14

我有生成表单的代码。

    <form asp-controller="home" asp-action="EditClient" method="post" class="mt-3" id="EditClientForm">
                <div class="form-group row">
                    <label asp-for="Client.Client" class="col-sm-3 col-form-label"></label>
                    <div class="col-sm-8">
                        <input asp-for="Client.Client" class="form-control" placeholder="Client Name" id="editClient">
                    </div>
                </div>
                <div class="form-group row">
                    <label asp-for="Client.ClientCode" class="col-sm-3 col-form-label">Client Code</label>
                    <div class="col-sm-8">
                        <input asp-for="Client.ClientCode" class="form-control" placeholder="Client Code" id="editClientCode">
                    </div>
                    @*<div class="col-sm-4">
                            <div class="custom-checkbox" style="padding: 0.375rem 0.1rem;">
                                <label asp-for="ClientActive">
                                    <input asp-for="ClientActive" /> Active
                                </label>
                            </div>
                        </div>*@
                </div>
                <button type="submit" class="btn btn-primary">Save</button>
            </form>

这是控制器中的代码

[HttpPost]
    public async Task<IActionResult> EditClient(SetupViewModel newModel)
    {
            Employee employee = await employeeRepository.GetEmployeeByPhoneNumber(((ClaimsIdentity)User.Identity).FindFirst(AccountConstant.PhoneNumber).Value);
            var model = HttpContext.Session.GetComplexData<SetupViewModel>("SetupModel");
            foreach (var project in model.Projects)
            {
                project.ClientCode = newModel.Client.ClientCode;
                project.Client = newModel.Client.Client;
                await projectRepository.Update(project, employee);
            }
            model.Client.Client = newModel.Client.Client;
            model.Client.ClientCode = newModel.Client.ClientCode;

            HttpContext.Session.SetComplexData("SetupModel", model);
            return RedirectToAction("Setup", "Home");

    }

提交过程成功后,我想展示一个成功模式。 怎么做? 我有搜索使用Ajax,但我不是很了解。

共有1个答案

华瀚漠
2023-03-14

有几种方法可以做到这一点。 对于我正在从事的一个小项目来说,一个简单的机制就足够了,我使用的是TempData。 我有一个控制器类的静态扩展方法。 我只需添加一条消息并在操作中显示,然后在所有视图使用的布局中显示

/// <summary>
/// Add a message to a list of messages in Tempdata
/// </summary>
/// <param name="c"></param>
/// <param name="message"></param>
public static void AddTempDataMessage(this Controller c, string message)
{
    // assume a new list
    var messages = new List<string>();

    // check if object already exists
    object m = c.TempData.Peek("Messages");

    // object stored as a string array for simplicity
    if (m != null && m is string[] v)
    {
        // set existing array to the list
        messages = v.ToList();
    }

    messages.Add(message);

    // Store as a simple array since using a List<string> changes to string[] on redirect (Microsoft bug?)
    c.TempData["Messages"] = messages.ToArray();
}

示例操作用法

    if (imageExists != null)
    {
        this.AddTempDataMessage("Image already in set");
        return RedirectToAction("EditImageSet", new { imageSetId });
    }

在共享布局视图中的用法

// A list of messages to display
List<string> Messages()
{
    // assume a new list
    var messages = new List<string>();

    // check if already exists
    object m = TempData["Messages"];

    // stored as an array of strings since a redirect changes a list to an array so we stored it as an array
    if (m != null && m is string[])
    {
        // set existing
        messages = ((string[])m).ToList();
    }

    return messages;
}



        @* Messages *@
        <div class="text-danger">
            @foreach (var m in Messages())
            {
                <span class="mr-2">@(m + ".")</span>
            }
        </div>
 类似资料:
  • 我目前正在尝试使用谷歌表单和应用程序脚本制作一个文书向导。在表单的末尾,我尝试在表单提交并显示HTML窗口后运行应用程序脚本。我试着使用以及应用程序事件触发器,但我一直收到错误

  • 问题内容: 问题 我有一个表单,提交后将运行基本代码来处理提交的信息,并将其插入数据库中以显示在通知网站上。此外,我还有一个列表,他们注册了通过电子邮件和SMS消息接收这些通知的人员。此列表暂时是微不足道的(仅推送约150个),但是足以导致花费一分钟以上的时间在整个订户表中循环并发送150多个电子邮件。(由于批量电子邮件政策,电子邮件是根据我们的电子邮件服务器的系统管理员的要求单独发送的。) 在此

  • 对于如何控制表单中的提交事件,我有点困惑,我试图在这里找到一个简单的答案。 我想在将表单数据发送到表单操作脚本之前验证表单输入。我试图通过捕获submit事件、使用Ajax调用验证脚本来解决这个问题,如果验证成功,我希望调用实际的表单过程。但我不确定该如何进行。简单地使用似乎会失败(我猜是没有发送表单值)。 下面是概念代码: null null

  • CSS很强大的一点是,它具有很强的向前兼容性:如果浏览器不识别某个属性或值,它会忽略这个声明;如果不识别某个选择器,它会忽略整个规则。 这意味着新的选择器、属性和值,不会对老的浏览器产生严重影响。因此,设计师就可以大胆的应用CSS3的高级规则和声明,而不必担心老浏览器是否能够识别。 事实上,这些高级规则确实给设计带来极大的便利,设计师都迫不及待的要使用它,并且希望它们在老的浏览器中,和现代浏览器中

  • 问题内容: 当我尝试在Python 3.3中运行该代码时,该代码不执行任何操作。没有错误或任何东西。怎么了 问题答案: 您仍然必须 调用 该函数。

  • 问题内容: 我的问题是,当上一页由表单创建时,后退按钮会使浏览器说“页面已过期”。 例: 第1页:使用搜索条件提交的表单($ _POST请求,该表单指向第2页) page2:接收$ _POST请求并显示结果(带有链接的用户列表,指向page3) 第3页:显示用户个人资料 现在,当访客单击浏览器中的“后退”按钮时,它将显示类似“页面已过期”的信息。 而是应该在没有警告的情况下显示前一页(第2页,带有

  • 本文向大家介绍JS实现动态生成表格并提交表格数据向后端,包括了JS实现动态生成表格并提交表格数据向后端的使用技巧和注意事项,需要的朋友参考一下 本文实例介绍了JS实现动态生成表格并向后端提交表格数据的相关代码,分享给大家供大家参考,具体内容如下 先来看一下需求:在web页面上动态的生成表格,并可以对表格中的数据进行编辑,然后把表格中的数据提交至后端服务器保存。 那么我们首先需要解决的是动态生成表格

  • 在学习了一些Redux和react的教程后,我刚刚开始尝试react,但在控制台中出现了一个错误: 警告:不能给无状态函数组件提供refs(请参见登录创建的FieldGroup中的ref“username”)。访问此引用的尝试将失败。 将表单字段输入值传递给“提交”按钮的正确方法是什么?这些值应该进入redux存储吗?在阅读了文档:https://reactjs.org/docs/refs-and