【问题标题】:Generic solution to manage windows with ASP.NET MVC使用 ASP.NET MVC 管理窗口的通用解决方案
【发布时间】:2017-01-15 08:07:21
【问题描述】:

我的项目中有三个不同的案例用于打开新窗口。当我单击窗口中的链接时,我希望执行以下解决方案之一:

我将使用以下类型来打开窗口:

_空白
_自己
_父母

我有以下列来打开一个新窗口:

Code          Width   Height   Behaviour
AccountPage    400      600      Self
ProspectPage   700      700      Blank
PasswordPage   200      200      Single

我需要将特定参数传递给 javascript,例如宽度、高度和代码。代码用于打开哪个屏幕并获取其参数。我有 invoicepage、prospectpage、searchpage 等。如果 invoicepage 被打开,它的宽度将为 200,或者如果前景page 被打开,宽度将为 400px。

在通用技术中管理和传递给 javascript 窗口打开类型和参数的正确方法是什么?我如何准备我的课程和类型?

我尝试在我的 LayoutGeneral.cshtml 中使用元标记将数据集传递给 javascript,但我无法得到它。

<meta name="IrisTabHeaderName" content="@Model.WindowInfo" />

我应该将我的数据保存在我的 BaseViewModel 中并从那里将参数传递给 javascript,还是应该将我的所有案例保存在 javascript 中并从带有类的 cshtml 页面调用?

【问题讨论】:

  • 请看答案here。只需在您的链接中为target="" 属性提供一个名称,如果该窗口已经以您在目标中指定的名称 打开,它会将其加载到同一窗口中。您可以使用您的 Code 值来执行此操作。
  • 每次加载。当我在当前窗口中单击新链接时,如果没有像 PasswordPage 这样的代码打开窗口,我应该打开一个新的空白模式页面,但是如果我已经为此链接打开了一个窗口,我将不会打开一个新的空白模式窗口.我应该在那个窗口中打开链接,而不是在另一个窗口中。
  • 一个模态窗口,还是一个新的标签/窗口?
  • 你想用你的逻辑在controllerrepository中设置窗口类型的条件并设置你的链接。对吧?

标签: javascript c# asp.net asp.net-mvc window


【解决方案1】:

根据我的说法,您可以使用的最佳方法: - 首先你必须为你的窗口类型创建Enum - 第二次使用这些Enums 设置您的属性 - 最后在.cshtml 页面设置您的属性值。

我为您创建了一个示例演示,它可能对您有所帮助:

1) 为窗口类型创建枚举:

public enum WindowTypes
     { _self = 1, 
       _blank = 2, 
       _parent = 3, 
       _top = 4 
      }

2) 在基本视图模型中创建一个属性

public class TestBaseViewModel
    {
        public int WindowType { get; set; }
    }

3) 将属性值设置到控制器或存储库中

public ActionResult Index()
        {
            TestBaseViewModel model = new TestBaseViewModel();
            model.WindowType = (int)EnumsCollection.WindowTypes._blank; // apply your logic like this
            return View(model);
        }

4) 只需在您的 .cshtml 页面中获取此属性

@Html.ActionLink("link text", "actionName", null, new { target = Enum.GetName(typeof(EnumsCollection.WindowTypes), Model.WindowType) }) 

然后输出如下:

 <a href="/Controller/actionName" target="_blank">link text</a>

希望对你有帮助。

编码愉快:)

【讨论】:

  • 这是一个很好的解决方案,但除此之外我还需要将特定参数传递给 javascript,例如宽度、高度和代码。代码用于打开哪个屏幕并获取其参数。我有 invoicepage、prospectpage、searchpage 等。如果 invoicepage 打开,它的宽度将为 200,或者如果打开前景page,宽度将为 400px。
  • 如果您可以将您的html代码和您的javascript发布到您想要实现相同的地方会更好
【解决方案2】:

您将数据集传递给 javascript 的方式是错误的。您可以使用枚举或 json 对象保存页面参数,然后按如下方式对其进行反序列化:

  var data =
'[{
    "Code": {
        "AccountPage": { "width": "400", "height": "600", "name": "_self" },   
        "ProspectPage": { "width": "700", "height": 700, "name": "_blank" },
        "PasswordPage": { "width": "200", "height": "200", "name": "PasswordPage" }
    }
}]';

在脚本源中添加这个data.json文件:

<script type="text/javascript" src="data.json"></script>

并从 javascript 中的 json 文件中获取您的对象:

var pageRules = JSON.parse(data);

最后你可以通过附加到'a'标签的点击事件来检查它:

$(function () {
    $("a").click(MyLinkClickFunc);
});

function MyLinkClickFunc()
{
    var $this = $(this);
    var attrName = $this.attr("name");
    var params = null;

    if (typeof attrName !== typeof undefined && attrName !== false) {
        params = pageRules.Code[attrName];
        if(params == null)
        {
            var authCode = attrName.substr(0, attrName.indexOf('_'));
            params = pageRules.Code[authCode];
        }
    }

    if (params != null)
    {
        MyPopupOpener($this.attr("href"), params.name, params.width, params.height);
    }
}

【讨论】:

  • 我喜欢这种观点。它比我的解决方案更实用。谢谢。
猜你喜欢
  • 2015-12-25
  • 1970-01-01
  • 2011-01-20
  • 2022-08-03
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多