如何在服务器发布操作结果后打开新选项卡

2024-01-05

情况是这样的。

我有一个保存和一个打印按钮:

<input name="btnSubmit" type="submit" value="Save" /> 
<input name="btnSubmit" type="submit" value="Print"/> @*Redirect to Action("Print", "controler")*@

但是打印按钮必须打开一个新选项卡。如果只是我,我显然知道我必须在打印之前保存......这不会是一个问题。我可以使用此链接与目标空白代替:

<a target="_blank" href="@Url.Action("Print", "controler", new { id = Model.id })" type="submit" value="Print" > Print</a>

很简单,但现在有些用户认为打印按钮还应该保存页面。因为他们不推送保存...他们只是打印并且模型更改丢失,因为我无法在打印链接中调用后期操作...这是一个链接。

起初,我想我可以对保存函数进行异步调用,但我的模型太大了,它需要回发它自己的操作(对吗?)

经历过这个:

如何在response.redirect上使用Target=_blank? https://stackoverflow.com/questions/8994285/how-do-i-use-target-blank-on-a-response-redirect

我不确定它是否真的对 MVC 有帮助...现在我被困在这里:

[HttpPost]
public ActionResult MyForm(string btnSubmit, formModel model)
{
    if (btnSubmit == "Print")
    {
        dbSave(model);
        return RedirectToAction("Print", "controler"); // Won't open new tab... 
    }
}

首先,当用户单击打印按钮时,我通过 ajax 请求发布我的数据,成功完成后我打开一个新选项卡。

Example:

$.ajax({
    url: "@Url.Action("create", "Post")",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify({ model: model})
}).done(function(result){
window.open('@Url.Action("Print", "controler", new { id = Model.id })', '_blank').focus();
}); 

OR

你想在http响应中写一些像你的例子一样的东西,那么你可以做类似的事情

  HttpContext.Current.Response.Write( @"<script type='text/javascript' language='javascript'>window.open('page.html','_blank').focus();</script>");

UPDATE

我在下面添加了一个测试项目的完整流程。

Example:

Model:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ProductCode { get; set; }
    public decimal Price { get; set; }
}

控制器:

 public class ProductController : Controller
    {
        // GET: Product
        public ActionResult Index()
        {
            return View();
        }


        // GET: Product/Create
        public ActionResult Save()
        {
            var model = new Product();
            return View(model);
        }

        // POST: Product/Create
        [HttpPost]
        public ActionResult Save(Product model, string saveButton)
        {
            if (ModelState.IsValid)
            {
                //do something 
                return
                    Json(
                        new
                        {
                            redirectTo = Url.Action("Index", "Product", new { Area = "" }),
                            OpenUrl = Url.Action("Print", "Product", new { Area = "" })

                        });
            }
            return View(model);
        }
        public ActionResult Print()
        {
            return View();
        }
}

保存.cshtml:

@model Product

@{
    ViewBag.Title = "Save";
}

<h2>Save</h2>
@Html.Hidden("saveButton","Test")@*Change Test to your value or change it to using JavaScript*@
@using (Html.BeginForm("Save", "Product", new {area = ""}, FormMethod.Post, new {id = "fileForm", name = "fileForm"}))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Product</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ProductCode, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.ProductCode, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.ProductCode, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <button type="button" class="btn btn-primary" id="btnSave">Save</button>
                <button type="button" class="btn btn-default">Print</button>
            </div>
        </div>
    </div>
}

Script:

<script>
        $("#btnSave").click(function() {
            $.ajax({
                url: $("#fileForm").attr('action'),
                type: $("#fileForm").attr('method'),
                beforeSend: function() {
                },
                data: $("#fileForm").serialize() + "&saveButton=" + $("#saveButton").val()
            }).done(function(result) {
                if (result.OpenUrl) {
                    window.open(result.OpenUrl, '_blank');
                }
                if (result.redirectTo) {
                    setTimeout(function() {
                            window.location.href = result.redirectTo;
                        },2000);
                }


            });
        })

    </script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在服务器发布操作结果后打开新选项卡 的相关文章

  • 仅在页面加载时执行 Javascript,而不是回发 (SharePoint)

    我正在尝试在 SharePoint 网站上的自定义页面上加载页面时执行一些 JavaScript 它使用当前用户填充人员选择器 问题是代码也在回发时执行 这是我不希望的 因为它会重置人员选择器的任何更改 我尝试过使用if IsPostBac
  • 是否可以在 ASP.NET Web API 和 SPA 中使用基于 cookie 的身份验证?

    我想创建基于 angularjs 前端和 ASP NET Web API 的 Web 应用程序 我需要创建安全 api 但我无法在将实施此 Web 应用程序的公司服务器上使用基于令牌的身份验证 是否可以对 SPA 和 ASP NET Web
  • 在 CSHTML 页面中实现 switch 语句

    我正在尝试做一些不同的事情 我有一个包含 ID 的视图 根据 Id 的值 我想更改显示的标题 就像是 switch id case test h1 Test Site h1 case prod h1 Prod Site h1 break 我
  • 在 ASP.NET 中动态设置主题

    我有一个连接到不同域的应用程序 我没有复制和修改每个应用程序 而是在硬盘驱动器上使用相同的物理位置 但在 IIS 上使用单独的应用程序池和网站 基本上我想根据主机名更改主题 IE 用户访问 websome com 获取 websome 主题
  • 在asp net mvc中简单的图像上传

    我正在构建一个简单的学校门户 我一直坚持将图像上传到我的应用程序中 即用户应该将学校图像上传到我的服务器 我的图像目录为 Content Images 所有上传图像都应该上传到这个目录 我有以下代码 input type file id S
  • orchard cms路由问题

    我创建了一些自定义内容类型 其中包括路线部分 以便我的内容管理员可以编辑项目的别名 我没有运气配置一条路线 使我自己的控制器能够为这些项目的请求提供服务 核心 Routable 模块中到 ItemController 的路径的路由优先级为
  • 自定义WebApi授权数据库调用

    我正在尝试确定我编写的自定义授权属性是否确实是一个好主意 Scenario假设我们有一系列商店 每个商店Store有一个主人 只有商店的所有者才能对商店进行CRUD操作 除了具有Claim这基本上超越了所有权要求 并表示他们可以在任何商店上
  • 在 Foreach 或 For 循环中使用 EditorFor (ASP.NET MVC + RAZOR)

    我目前正在实施一个家谱我的 ASP NET MVC 项目中的系统 为了设置家庭成员之间的关系 我需要每行显示两个 ComboBox DropDownList 来定义一个成员与另一个成员之间的关系 首先我将分享我的代码 然后我将解释到目前为止
  • 我的机器密钥是自动生成的还是隔离的?

    我正在尝试分享 ASPXAUTHASP NET MVC 4 应用程序 在 IIS 7 5 中 和使用的服务之间的 cookieHttpListener在同一主机上 浏览器正确地向两者呈现 cookie 但我的服务收到System Web H
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 我应该对 ObjectContext 使用 using 关键字吗?

    我在这个网站或 CodeProject 的某个地方读到 好的规则是 如果某个类已经实现了 IDisposable 接口 那么您应该使用 using 关键字 因为使用翻译成 MSIL 的关键字会尝试 最终阻止如下内容 try some log
  • Active Directory 会员资格提供商 - 如何对此进行扩展?

    我正在努力通过 AD Membership Provider 启动并运行 MVC 应用程序 但在解决这个问题时遇到了一些问题 我有一个基本配置设置并在我登录时工作 电子邮件受保护 cdn cgi l email protection 密码
  • 如何从asp net core中的AuthorizationFilter重定向到登录页面?

    当我回来时ForbidResult 它重定向到AccessDenied启动时指定的页面 我想做同样的事情UnauthorizedResult 但重定向到Login page P S 我没有使用标准Authorize控制器中的属性我有自己的
  • mvc4 捆绑包,它是如何工作的?

    在 mvc4 中 他们使用捆绑包来调用所有脚本和 css 文件一次 据我所知 调用js和cs文件时 它们的顺序很重要 如果我使用捆绑包 我如何知道捆绑包内的 css 和 js 文件的顺序是否正确 我可以定制订购吗 我现在的日期选择器有问题
  • Asp.net错误无法加载文件或程序集[重复]

    这个问题在这里已经有答案了 可能的重复 计算机崩溃后 我的 Visual Studio 2010 将无法加载程序集 https stackoverflow com questions 4975455 after a computer cra
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • SignalR 似乎正在减慢我的 MVC/Azure 应用程序的启动速度

    我有一个 MVC 应用程序在 Windows Azure 上的 WebRole 上的 NET 4 5 下运行 使用 SignalR 1 0 alpha2 并使用 ServiceBus 底板 在我的 App Start 文件夹中 我有 Reg
  • Jquery 验证不能正确验证数字?

    我在使用 jquery 非侵入式验证验证数字时遇到问题 我使用的版本是 ASP NET MVC 3 jQuery 1 9 1 jQuery 用户界面 1 10 1 JQuery 验证 1 11 0 我试图验证的输入是
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S

随机推荐

  • AttributeError:模块“tensorflow.python.keras.api._v2.keras.backend”没有属性“set_image_dim_ordering”

    最近尝试使用python运行github上的一段代码 代码位于 https github com costapt vess2ret https github com costapt vess2ret我使用了以下软件 TensorFlow g
  • 在Python中按索引填充列表/数组?

    这可能吗 myList myList 12 a myList 22 b myList 32 c myList 42 d 当我尝试时 我得到 IndexError list assignment index out of range 您必须预
  • 来自 acf 字段值的传单标记

    我喜欢 Leaflet 因为它比 Google 地图更容易包含和更改外观 我在我的 WordPress 网站上使用 ACF 插件 其中有几篇带有位置的帖子 现在我所做的是使用 div 属性将数据从 php 传递到 JS 如下所示 div c
  • 在 AngularJS 中使用相对路径进行服务调用

    我有以下代码 在部署到测试服务器之前它工作正常 scope getUserList function userName http method get url GetUserList params userName userName suc
  • 如何在角度中使用 useFactory 根据某些条件延迟加载模块?

    我有一个包含大量模块和组件的角度项目 其中我想根据某些业务逻辑显示模块的组件 我想使用 Angular 的强大功能 即延迟加载 这将使我的应用程序变得精简 我想做的事 假设我有一个书店网站 很多读者都花时间阅读在线文章 我想根据以下内容显示
  • 如何使用 xib 文件为自定义 UIView 类编写 init 方法

    我使用界面生成器创建了简单的视图 该视图有一个标签 你知道如何为这个类创建 init 方法吗 我写了自己的版本 但我不确定它是否正确 interface AHeaderView property nonatomic weak IBOutle
  • 如何更改分片键

    我知道不可能更改片键 但是 当我设置了不正确的分片键时 如何更改它 转储您分片的集合 再次导入它 设置新的分片键
  • 使用实体框架添加和更新实体

    在我的上一个项目中 我使用了 Entity Framework 5 Code First 我完成了我的项目 但在开发过程中遇到了很多痛苦 我试图在下面解释我的痛苦 我的数据访问逻辑层中有几个数据类 例如 Product ProductCat
  • 执行内存中的exe

    我正在尝试这段代码 从内存中执行EXE http www coderprofile com networks source codes 138 execute resource directly in memory 我遇到错误 实际和形式
  • WPF-将列表绑定到列表视图

    我正在创建一个 wpf 应用程序并从我的 USB 网络摄像头捕获图像 我尝试过的是将所有捕获的图像存储在List并在一个Listview public List
  • 为什么我不能将函数调用(而不是函数引用或匿名函数)传递给 setTimeout()?

    请忽略这个代码没有实现任何目标的事实 并对可能是一个愚蠢的问题表示歉意 我知道我无法将函数调用传递给setTimeout 作为第一个参数 但是why我可以不这样做吗 let names Andy Ross David function pr
  • 为什么 std::cin 不能隐式转换为 bool?

    In C 入门第五版 第 14 章讨论转换运算符 在该标准的早期版本中 想要定义到 bool 的转换的类面临一个问题 因为 bool 是算术类型 所以转换为 bool 的类类型对象可以在任何需要算术类型的上下文中使用 这种转变可能会以令人惊
  • popen() 替代方案

    我的问题是这个问题的延伸 popen 创建一个额外的 sh 进程 https stackoverflow com questions 6742635 popen creates an extra sh process Motives 1 我
  • 如何在 C# 中打开程序集绑定日志记录?

    我遇到了这个错误 无法弄清楚缺少什么 Could not load file or assembly xxxxx Version 1 0 0 42 Culture neutral PublicKeyToken c5067b3d1110b13
  • 设置 ComboBox 所选项目突出显示颜色

    我需要更改弹出列表中组合框所选项目的突出显示颜色 我找到了几个解释如何执行此操作的教程 但它们都使用 Blend 我没有也无法获取 或者涉及更改系统默认颜色 这对我来说似乎是一种黑客行为 有人可以指出我需要覆盖的模板 或者告诉我需要设置的属
  • 如何在 Makefile 中获取脚本源?

    有没有更好的方法从 makefile 中获取设置环境变量的脚本 FLAG 0 ifeq FLAG 0 export FLAG 1 bin myshell c
  • 递归取消引用指针

    当我试图在这里回答一个问题时 我发现了这个问题 如何递归取消引用指针 C 03 https stackoverflow com questions 8022821 how to recursively dereference pointer
  • 跨两个表的 SQL SELECT

    我对如何处理这个 SQL 查询有点困惑 我有两个表 记录数相同 我想返回一个列 该列是两者之间的除法 换句话说 这是我的无法正常工作 query SELECT SELECT v FROM Table1 SELECT DotProduct F
  • 升级到 NDK 14 后无法在 C++ 代码中找到声明

    我更新了 Android Studio 2 3 以使用 NDK 14 当您使用代码时 一切都按预期工作 代码编译并且应用程序按预期运行 然而 由于某种原因 当您尝试跳转到任何 C 对象 函数 变量的减速时 您会收到一条消息 工作室 无论代码
  • 如何在服务器发布操作结果后打开新选项卡

    情况是这样的 我有一个保存和一个打印按钮