在ASP.Net MVC中使用DropDownList的最佳编程实践

我正在使用MVC 5几个月阅读了很多文章,论坛和文档,但总是想知道视图中哪个更好; 1)使用这里的模型静态方法绑定数据 2)使用在Controller中设置的ViewData [index]绑定相同的数据,前面的示例将如下所示 @Html.DropDownListFor(n => n.MyColorId, ViewData[index])

带有额外列的多对多nhibernate

所以我有两个表Users和Groups 。 这些表(在数据库中)与UGlink链接表一起使用。 现在除了主外键之外,链接表还有一个额外的列: Date 。 根据我的理解,这意味着我必须有两个多对一,链接“在中间”。 但是,因为我几乎从不对额外的列值感兴趣,所以无论如何都要避免链接? 那是我希望能写的: thisUser.Groups 获取组,而不是: thisUser.UGlinks.Group

为什么ValueType.GetHashCode()实现得像?

来自ValueType.cs **动作:我们返回哈希码的算法有点复杂。 我们看 **为第一个非静态字段并获取它的哈希码。 如果类型没有 **非静态字段,我们返回该类型的哈希码。 我们不能接受 **静态成员的哈希码,因为如果该成员的类型与 **原始类型,我们将以无限循环结束。 今天,当我使用KeyValuePair作为字典中的键(它存储了xml属性名称(枚举)和它的值(字符串))时,我被它咬了,并期望它根据其所有字段计算它的哈希码,但根据实施情况,它只考虑了关键部分。 示例(来自Linqpad的c / p): void Main() { var kvp1 = new KeyValuePair(“foo”, “bar”); var kvp2 = new KeyValuePair(“foo”, “baz”); // true (kvp1.GetHashCode() == kvp2.GetHashCode()).Dump(); } 我猜第一个非静态字段意味着声明顺序中的第一个字段,这也可能因为任何原因在源中更改变量顺序而导致麻烦,并且认为它不会在语义上更改代码。

防止在WPF代码中使用Dispatcher.Invoke

我本质上是一个网络和后端程序员。 通常我尝试avaoid制作Windows程序。 现在我必须创建一个WPF客户端。 我有一个后台任务,每隔一段时间就会举办一次活动。 (它像轮询器一样工作,当满足标准时,会引发一个事件)。 Noob和我一样,我写了这个附加到事件的代码来更新UI。 private void IsDisconnectedEvent() { UserWindow.Visibility = Visibility.Hidden; DisconnectWindow.Visibility = Visibility.Visible; } 这给出了一个例外,因为我不在同一个线程上。 经过一些谷歌搜索后,我发现我应该改变代码: private void IsDisconnectedEvent() { Dispatcher.Invoke(() => { UserWindow.Visibility = Visibility.Hidden; DisconnectWindow.Visibility = Visibility.Visible; }); } 这是有效的,但这不是唯一的事件,因此使我的代码可怕的丑陋。 有没有更好的方法来做到这一点?

如何用c#制作两个透明层?

有三个连续的图层, picturebox1(.jpg) -> label1 -> picturebox2(.png transparent)我想要的是使label1和pictrurebox2对pict​​urebox1透明,这样label1可以通过picturebox2看到但它无法正常工作.. public Form1() { InitializeComponent(); label1.Parent = pictureBox1; label1.BackColor = Color.Transparent; pictureBox2.Parent = pictureBox1; pictureBox2.BackColor = Color.Transparent; picturebox2.BringToFront(); } 所以请帮助我

dependency injection类型选择

最近我遇到了一个问题,我必须根据参数选择一个类型。 例如:用于发送应根据输入参数选择正确频道(电子邮件,短信,…)的通知的类。 我看起来像这样: public class NotificationManager { IEmail _email; ISms _sms; public NotificationManager (IEmail email, ISMS sms) { _email = email; _sms = sms; } public void Send(string type) { switch(type) { case “email”: _email.send; break; case “sms”: _sms.send; break; } } } 这里的问题是,当我使用这种结构时,构造函数会随着发送通知的所有不同方法快速增长。 我真的不喜欢这个,它使单位测试这个选择单元无法管理。 我不能简单地说new email(); 因为通知类型的电子邮件将依赖于IEmailManager,这只会移动问题。 是否有某种模式可以做同样的事情,但是以更好,更清洁的方式?

将console.writeline从Windows应用程序重定向到字符串

我有一个用C#编写的外部dll,我从程序集文档中研究了它使用Console.WriteLine将其调试消息写入控制台。 这个DLL在我与应用程序的UI交互时写入控制台,所以我不直接进行DLL调用,但我会捕获所有控制台输出,所以我想我必须在表单加载中初始化,然后在以后获取捕获的文本。 我想将所有输出重定向到字符串变量。 我试过Console.SetOut ,但它用于重定向到字符串并不容易。

Unity中的简单事件系统

我试图在Unity中使用事件系统(C#方式),但我遇到了实现它的问题。 大多数示例显示了一个类,您可以在其中定义处理程序; 然后你在相同的类中编写,匹配处理程序签名的函数,并将事件写为静态 public class EventExample : MonoBehaviour { public delegate void ExampleEventHandler(); public static event ExampleEventHandler OneDayPassed; public static void NextTurn() { // do stuff then send event if (OneDayPassed != null) OneDayPassed(); } } 然后在另一个类中,您订阅事件,创建一个实际执行某些操作的函数 public class EntityWatcher: MonoBehaviour { void Start() { EventExample.OneDayPassed += this.PrepareNextDay; } public void PrepareNextDay() { // Do […]

在C#中暂停进程

如何在C#中暂停整个过程(如我单击Suspend时的Process Explorer)。 我正在使用Process.Start启动Process,并且在某个事件上,我想暂停该进程以便能够对其“快照”进行一些调查。

超时模式 – Thread.Abort真的有多糟糕?

我在各种网站上看到Thread.Abort不是很好用。 在这种情况下,如何实现超时模式? 例如,我已经读过MS在整个框架中使用下面的模式(我已经用扩展方法包装)。 就个人而言,我认为这是一个非常酷的扩展,但我担心Thread.Abort。 有没有人有更好的方法? public static bool CallandWait(this Action action, int timeout) { Thread subThread = null; Action wrappedAction = () => { subThread = Thread.CurrentThread; action(); }; IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (((timeout != -1) && !result.IsCompleted) && (!result.AsyncWaitHandle.WaitOne(timeout, false) || !result.IsCompleted)) { if (subThread != null) { subThread.Abort(); } return false; […]