我的数据库中有许多表,它们包含对键值对的引用:
电话号码类型:
等等
所以我有一个表的类型,当它们在其他表中使用时,它们将int值作为外键引用.当我把它们拉出来时,我一直把它们存放keyvaluepair<int, string>在正在使用它们的类中.
当我需要获取它们的列表时,我想我只会创建它们的List <>而不是使用两种不同类型的数据类型来获取相同的数据.
当我在使用edittemplate位时需要在gridview中填充下拉列表时,我的问题已经到了.如果我使用数据源将其拉出来,它将在文本中写入[1 Home],而不是将int作为值,将Home作为要显示的文本.
我想我真的有一个多部分问题.
一:
我是傻瓜吗?这是一个非常糟糕的方法来获取数据并存储它(keyvaluepair部分)?我应该将它全部存储在数据表中吗?我不喜欢把它全部放在数据表中.我把我的DAL带到我的BLL并尝试将所有内容封装为对象或List<>对象而不是所有内容的表.大部分时间这都运作良好.
二:
如果我使用某个对象而不是数据表绑定到下拉列表的objectdatasource,我该如何设置当前选择的值,而不是让它只选择列表中的第一项?
编辑
正如下面所指出的,我是一个白痴,只需要设置DataValueField和DataKeyField.
要使下拉列表绑定,我必须这样做:
SelectedValue='<%# DataBinder.Eval(Container, "DataItem.PhoneType.Key") %>'
Run Code Online (Sandbox Code Playgroud)
我没有立刻看到它的原因是因为它没有出现在我的intellisense中,但是当我手动键入它时,它起作用了.
我试图从屏幕上下载一些文本输出作为文本文件.以下是代码.它在某些页面上工作,而在其他页面上根本不工作.任何人都可以在这里建议什么是错的?
protected void Button18_Click(object sender, EventArgs e){
Response.Clear();
Response.Buffer = true;
Response.ContentType = "text/plain";
Response.AppendHeader("content-disposition", "attachment;filename=output.txt");
StringBuilder sb = new StringBuilder();
string output = "Output";
sb.Append(output);
sb.Append("\r\n");
Response.Write(sb.ToString());
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个使用区域的ASP.NET MVC 2(RTM)项目.一个区域的Home控制器的Index操作需要使用RenderAction来生成页面的子部分.调用的操作也在同一个Home控制器中定义.所以电话应该只是:
<% Html.RenderAction("List") %>
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个例外:
在控制器'RareBridge.Web.Areas.Events.Controllers.HomeController'上找不到公共操作方法'List'.
请注意,我不在 "活动"区域!我在一个完全不同的领域.如果我删除"事件"主控制器,那么异常仍然会发生,但命名一个不同的控制器(仍然不是我想要它调用的控制器).
我也尝试过为RenderAction方法提供控制器名称和区域,但是会发生同样的异常.这里发生了什么?
BTW:我使用Autofac作为我的IoC容器
我的ASP.NET应用程序正在使用Windows身份验证 如果我运行以下代码:
WindowsIdentity wi = (WindowsIdentity)User.Identity;
foreach (IdentityReference r in wi.Groups)
{
ListBox1.Items.Add(r.Translate (typeof (NTAccount)).Value);
}
if (User.IsInRole ("Everyone"))
Label1.Text = "Is in role";
Run Code Online (Sandbox Code Playgroud)
列表框将包含用户所属的每个组的名称.如果我然后打电话User.IsInRole,并传递任何这些组的名称,我总是得到一个假.
谁能告诉我我做错了什么?
谢谢
我试图使用CTP4预览将实体框架(代码优先)添加到使用测试数据运行的MVC应用程序.
我目前收到此错误:
自创建数据库以来,支持"SchedulerContext"上下文的模型已更改.手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer.例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可选择使用新数据对其进行种子设定.
我根本不想生成数据库,因为我已经有了一个数据库.所以我尝试将以下内容添加到SchedulerContext构造函数中:
Database.SetInitializer<SchedulerContext>(new CreateDatabaseOnlyIfNotExists<SchedulerContext>());
Run Code Online (Sandbox Code Playgroud)
它完全没有效果 - 下次运行时我得到了同样的错误.当它执行访问数据库的LINQ语句时,似乎发生了错误 - 我认为第一个.
我应该把这个陈述放在哪里,或者这个陈述是否是这个问题的答案?
默认情况下,加载了传递PKAddPassesViewController.有没有办法知道视图上按下了哪个按钮.
//this method runs when user either click on the cancel or add button
-(void)addPassesViewControllerDidFinish: (PKAddPassesViewController*) controller
{
[self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
我想获得按下的按钮的标题PKAddPassesViewController.我已经尝试了下面的代码来访问标题,但我得到了null.
NSLog(@"Title of button %@",controller.navigationController.navigationItem.rightBarButtonItem.title);
Run Code Online (Sandbox Code Playgroud) 我正在使用VS2010/2012,我想知道是否有办法(可能使用反射)来查看程序集的构建方式.
当我在Debug中运行时,我使用将#if DEBUG调试信息写入控制台.
但是,当你最终得到一堆程序集时,有没有办法看看它们是如何构建的?获取版本号很简单,但我无法找到如何检查构建类型.
c# build visual-studio-2010 .net-assembly visual-studio-2012
我需要编写git信息:将名称,标签,分支等提交 到二进制(exe)文件.
需要运行字符串*| grep git,在该文件上只是查看有关它的最新git信息.我知道当我运行此命令(没有grep)时会显示AssemblyInfo,但我面临两个可能的问题:
我不确定我是否可以从代码写入AssemblyInfo,运行'git log'命令然后获取其输出并写入AssemblyInfo.
如果我想使用命令'git log'那么它不能在Windows上运行,但我的应用程序可能是在Windows上而不是在unix环境中构建的.
也许你知道另一种方法吗?
显然,许多应用程序需要处理文件并向用户显示错误.然而,System.IO.File类的成员抛出了很多例外.这些仅适用于ReadAllText:
那么如何抓住它们并将其显示给用户而不会吞下其他异常?
显然,通过完美的编码,您可以消除这些2:
如果你写了一个(可能是痛苦的)检查,你可以消除PathTooLongException.但是为什么要复制用于检查Microsoft编写的代码?
但即使您进行了所有检查,其他例外仍然可能发生:
打开文件时可以删除文件和文件夹,安全权限可以更改等.
除了向用户显示消息之外,我没有看到您在这些场景中可以做什么.你要找到操作系统找不到的目录吗?修复权限?将代码注入操作系统以支持不支持的操作?大声笑我所看到的可能是显示错误信息.
因此,如果每次打开文件读取文本时都必须捕获所有这些异常,那么我的代码必须很长且重复,除非我通过捕获异常来吞下异常.
创建FileException并捕获在实际处理文件时可能出现的所有异常是一种好习惯吗?我的想法是:
public class FileException : Exception
{
public FileException( Exception e )
: base( e.Message, e.InnerException )
{
}
}
public static class FileNoBS
{
public static string ReadAllText2( string path )
{
try
{
return File.ReadAllText( path );
}
catch ( ArgumentNullException e )
{
throw new FileException( e );
}
catch …Run Code Online (Sandbox Code Playgroud) 我正在处理的应用程序需要处理具有很长文件/路径名的文件.这是一个.Net 4.6应用程序,所以我实现了4.6.2之前的解决方法,以允许此处和此处概述的\\?\语法.
这是我用来启用该功能的代码(我无法修改app.config,因此必须在代码中设置):
var type = Type.GetType("System.AppContext");
if (type != null)
{
AppContext.SetSwitch("Switch.System.IO.UseLegacyPathHandling", false);
AppContext.SetSwitch("Switch.System.IO.BlockLongPaths", false);
var switchType = Type.GetType("System.AppContextSwitches");
if (switchType != null)
{
// We also have to reach into System.AppContextSwitches and manually update the cached private versions of these properties (don't ask me why):
var legacyField = switchType.GetField("_useLegacyPathHandling", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
legacyField?.SetValue(null, (Int32)(-1)); // <- caching uses 0 to indicate no value, -1 for false, 1 for true.
var blockingField = switchType.GetField("_blockLongPaths", System.Reflection.BindingFlags.Static …Run Code Online (Sandbox Code Playgroud)