Javascript 使用ASP.NET MVC管理windows的通用解决方案

Javascript 使用ASP.NET MVC管理windows的通用解决方案,javascript,c#,asp.net,asp.net-mvc,window,Javascript,C#,Asp.net,Asp.net Mvc,Window,在我的项目中,我有三个不同的案例来打开新窗口。单击窗口中的链接时,我希望执行以下解决方案之一: 我将使用以下类型打开窗口: _空白 _自我 _母公司 我有以下列用于打开新窗口: Code Width Height Behaviour AccountPage 400 600 Self ProspectPage 700 700 Blank PasswordPage 200 200 Single 我需

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

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

_空白
_自我
_母公司

我有以下列用于打开新窗口:

Code          Width   Height   Behaviour
AccountPage    400      600      Self
ProspectPage   700      700      Blank
PasswordPage   200      200      Single
我需要向javascript传递特定参数,如宽度、高度和代码。代码用于打开屏幕并获取其参数。我有invoicepage、prospectpage、searchpage等。如果打开invoicepage,其宽度将为200;如果打开prospectpage,其宽度将为400px

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

我试图在LayoutGeneral.cshtml中使用meta标记将数据集传递给javascript,但我无法获得它

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


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

根据我的说法,您可以使用的最佳方法是: -首先,必须为窗口类型创建
Enum
-然后使用这些
枚举设置属性
-最后在
.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的方式是错误的。您可以使用枚举或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>
最后,您可以通过附加到“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);
    }
}

可能的副本请参阅答案。只需在链接中为
target=”“
属性提供一个名称,如果已使用您在目标中指定的名称打开该窗口,则该属性将加载到同一窗口中。您可能可以使用
code
值来执行此操作。每次加载。当我在当前窗口中单击一个新链接时,如果密码页之类的代码没有打开窗口,我应该打开一个新的空白模式页面,但是如果我已经打开了该链接的窗口,我将不会打开一个新的空白模式窗口。我应该在该窗口中打开链接,而不是在另一个窗口中。模式窗口,或新的选项卡/窗口?是否要使用
控制器或
存储库中的逻辑设置窗口类型的条件,并设置链接的窗口类型。是吗?这是一个很好的解决方案,但除此之外,我还需要向javascript传递特定的参数,如宽度、高度和代码。代码用于打开屏幕并获取其参数。我有invoicepage、prospectpage、searchpage等。如果打开invoicepage,其宽度将为200,或者如果打开prospectpage,其宽度将为400px。如果您可以将html代码和javascript发布到您希望实现sameI的位置(如此透视图),则会更好。它比我的解决方案更实用。非常感谢。
$(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);
    }
}