小编Ben*_*son的帖子

我怎么能从服务器端控制器和AngularJS控制器传递数据?

我遇到了我认为是常见的场景,我在其中使用MVC模式(特别是ASP.NET的MVC框架)用于Web应用程序,前端使用AngularJS.我的问题是我有一个特定的值,它是模型的一部分传递给我的视图,我也想让我的Angular控制器的$ scope,理想情况下,一旦控制器被初始化.

如何做到这一点是以前被问及回答的问题.有一个显而易见的候选人:ngInit.然而,在某些时候,Angular更新了他们的文档,似乎是针对这一具体想法的警告:

唯一合适的用途ngInit是用于别名的特殊属性ngRepeat,如下面的演示中所示.除了这种情况,您应该使用控制器而不是ngInit初始化范围上的值.

建议的替代方案并不十分相关.

当然,还有其他我能想到的解决方法.例如,视图可以将值插入到ngModel隐藏输入的指令中.或者我可以简单地忽略警告并使用ngInit无论如何.但是,我能想到的任何一种方式都是一种更丑陋的方式来做同样的事情ngInit,或者显然更糟.

事实上,对我来说似乎是明显的解决方案显然是错误的,这可能是我的心态与Angular应该如何完成无关的指标.所以我的问题不是"我该如何处理这种情况",而是:

  1. 我怎么应该处理,或避免这种情况?
  2. 为什么我不应该使用ngInit

澄清,因为从前两个评论来看,这一点并不清楚:这是针对某个或大部分页面直接作为MVC视图提供的情况,只有一些特定的功能由Angular提供.我想传递给Angular控制器的数据已经传递给模型中的视图.我不希望Angular控制器然后去为服务器做自己的get请求,只是为了获得已经以不同格式提供给视图的相同参数.

javascript asp.net-mvc angularjs angularjs-controller ng-init

21
推荐指数
1
解决办法
1万
查看次数

如何在C#中备份和恢复系统剪贴板?

我将尽我所能详细解释我正在努力实现的目标.

我正在使用带有IntPtr窗口句柄的C#来从我自己的C#应用​​程序对外部应用程序执行CTRL-C复制操作.我不得不这样做,因为无法使用GET_TEXT直接访问文本.然后我在我的应用程序中使用该副本的文本内容.这里的问题是我现在已经覆盖了剪贴板.

我希望能做的是:

  1. 备份剪贴板的原始内容,该内容可能由我自己以外的任何应用程序设置.
  2. 然后执行复制并将值存储到我的应用程序中.
  3. 然后恢复剪贴板的原始内容,以便用户仍然可以访问他/她的原始剪贴板数据.

这是我到目前为止尝试的代码:

private void GetClipboardText()
{

    text = "";

    IDataObject backupClipboad = Clipboard.GetDataObject();

    KeyboardInput input = new KeyboardInput(this);
    input.Copy(dialogHandle); // Performs a CTRL-C (copy) operation

    IDataObject clipboard = Clipboard.GetDataObject(); 
    if (clipboard.GetDataPresent(DataFormats.Text))
    {
        // Retrieves the text from the clipboard
        text = clipboard.GetData(DataFormats.Text) as string;
    }

    if (backupClipboad != null) 
    {
        Clipboard.SetDataObject(backupClipboad, true); // throws exception
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用System.Windows.Clipboard而不是System.Windows.Forms.Clipboard.原因是当我执行CTRL-C时,System.Windows.Forms中的Clipboard类没有返回任何数据,但系统剪贴板却没有.

我查看了一些低级user32调用,如OpenClipboard,EmptyClipboard和CloseClipboard,希望它们可以帮助我这样做,但到目前为止,我一直在尝试恢复时遇到COM异常.

我想也许这与OpenClipboard参数有关,该参数期望一个想要控制剪贴板的应用程序的IntPtr窗口句柄.由于我提到我的应用程序没有GUI,这是一个挑战.我不知道该在这里传递什么.也许有人可以对此有所了解?

我是否错误地使用了Clipboard类?有没有明确的方法来获取没有GUI的应用程序的IntPtr窗口句柄?有谁知道备份和恢复系统剪贴板的更好方法?

c# backup clipboard restore

14
推荐指数
2
解决办法
6193
查看次数

HashHelpers.GetPrime中这一行的目的是什么?

我在.NET的Dictionaries实现中挖掘,发现了一个我很好奇的函数:HashHelpers.GetPrime.

它所做的大部分工作都非常简单,它会查找超过某个最小值的素数,并将其作为参数传递给它,显然是出于在哈希表结构中用作多个桶的特定目的.但有一个神秘的部分:

if (HashHelpers.IsPrime(j) && (j - 1) % 101 != 0)
{
    return j;
}
Run Code Online (Sandbox Code Playgroud)

(j - 1) % 101 != 0检查的目的是什么?也就是说,为什么我们显然想要避免使用多于101的倍数的多个桶?

.net c# dictionary

11
推荐指数
1
解决办法
917
查看次数

为什么父母可以访问子类的受保护成员的实例,如果兄弟姐妹不能?

本问题这些 文章所述,不允许以下内容:

public class A
{
    protected virtual int X {get; private set;}
}

public class B : A
{
    public int Add(A other)
    {
        return X + other.X;
    }
}
Run Code Online (Sandbox Code Playgroud)

因为如果是,你有这个:

public class C : A 
{  
    protected override int X { get { return 4; } }
}
Run Code Online (Sandbox Code Playgroud)

然后:

A c = new C();
B b = new B();
b.Add(c);
Run Code Online (Sandbox Code Playgroud)

这是非法的,因为即使B访问X意味着它知道C具有所需的签名,它仍然不允许实际访问该成员.


到现在为止还挺好.但鉴于上述情况,我很困惑的是为什么我能做到这一点:

public class A
{ …
Run Code Online (Sandbox Code Playgroud)

c# inheritance

6
推荐指数
2
解决办法
222
查看次数

以编程方式启动独立于平台的流程

情况

我试图以编程方式运行命令行工具DISM.exe.当我手动运行它时它可以工作,但是当我尝试使用以下代码生成它时:

var systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);

var dism = new Process();
dism.StartInfo.FileName = Path.Combine(systemPath, "Dism.exe");
dism.StartInfo.Arguments = "/Online /Get-Features /Format:Table";
dism.StartInfo.Verb = "runas";
dism.StartInfo.UseShellExecute = false;
dism.StartInfo.RedirectStandardOutput = true;

dism.Start();
var result = dism.StandardOutput.ReadToEnd();
dism.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

然后我的result出现:

错误:11

您无法使用32位版本的DISM为正在运行的64位操作系统提供服务.请使用与您的计算机体系结构相对应的DISM版本.

问题

我实际上已经意识到导致这种情况的原因了:我的项目设置为编译x86平台.(例如,请参阅此问题,尽管没有一个答案提到这一点).但是,不幸的是,目前我们仍然需要继续瞄准这个平台,我无法通过切换到任何CPU来解决这个问题.

所以我的问题是如何以独立于其父平台的方式以编程方式生成流程 - 即保持我的项目以x86为目标,但启动一个流程,该流程将针对其所在机器的正确平台.

.net c# dism

6
推荐指数
1
解决办法
857
查看次数