我正在构建标准的3层ASP.NET Web应用程序,但我在努力去做某些事情 - 特别是处理异常.
我试图在网上浏览一些例子,但找不到任何一个整个项目,显示一切如何链接在一起.
在我的数据层中,我正在连接到SQL Server并做一些事情.我知道我需要捕获可能因此而引发的异常,但我不知道该在哪里做.
根据我的阅读,我应该在UI层中进行,但在这种情况下,我不确定如何确保与数据库的连接已关闭.是否有人能够澄清如何做到这一点?此外,如果有人知道我在哪里可以找到一个示例3层Web应用程序,该应用程序遵循最佳实践,也会很棒.
谢谢
为什么有人不想使用代码隐藏文件,以便服务器端代码与标记分开?这不应该是.NET优于经典ASP的优势之一吗?
就个人而言,我认为将代码与标记混合会使代码更难理解.
我讨厌看到那些与标记交叉拼凑的<%%>(服务器端块),哎呀.我希望这在ASP.NET中仅用于向后兼容Classic ASP,但我总是看到MS中包含那些黄色括号的示例.
我试图理解一个可以在这里下载的代码示例,并解释为什么我执行代码时这里显示的任何服务器端断点都没有中断,即使我看到已经在web.config中设置了.由于我通常使用代码隐藏,我想知道在aspx中是否有一些关于服务器端代码的处理方式有所不同,这阻止了我调试runat = server代码.
所以.我的问题是:
1)为什么有人不想使用代码隐藏文件,以便服务器端代码与标记分开?
2)为什么我可能无法打破服务器端逻辑?
您的见解和意见也欢迎我的任何相关评论.
VB.NET相当于这个C#代码?
ctx.Load(site,
x => x.Lists.Where(l => l.Title != null));
Run Code Online (Sandbox Code Playgroud)
我试过了
ctx.Load(site, Function(x) x.Lists.Where(Function(l) l.Title IsNot Nothing))
Run Code Online (Sandbox Code Playgroud)
但这个错误 "The expression (Convert(l.Title) != null) is not supported."
思考
这是我创建的IF -Else梯形图,用于将第一个可视控件集中在我的窗体上.根据要求,任何控件都可以隐藏在窗体上.所以我必须找到第一个可见的控件并将其聚焦.
if (ddlTranscriptionMethod.Visible)
{
ddlTranscriptionMethod.Focus();
}
else if (ddlSpeechRecognition.Visible)
{
ddlSpeechRecognition.Focus();
}
else if (!SliderControl1.SliderDisable)
{
SliderControl1.Focus();
}
else if (ddlESignature.Visible)
{
ddlESignature.Focus();
}
else
{
if (tblDistributionMethods.Visible)
{
if (chkViaFax.Visible)
{
chkViaFax.Focus();
}
else if (chkViaInterface.Visible)
{
chkViaInterface.Focus();
}
else if (chkViaPrint.Visible)
{
chkViaPrint.Focus();
}
else
{
chkViaSelfService.Focus();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以做到这一点.我认为使用LINQ会占用性能,因为我必须遍历整个页面集合.我在页面很深,有主页.请建议.
民间,
我有一个按名称空间划分的相当n层的ASP.NET项目,但我需要分为三个项目:数据层,中间层和前端。
我这样做是因为...
答:这似乎是正确的做法,并且
B)我在运行ASP.NET托管程序集的单元测试时遇到各种问题。
无论如何,我的问题是,您在哪里保存配置信息?
例如,现在,当实例化新的数据上下文时,我的中间层类(使用Linq到SQL)会自动从web.config中提取其连接字符串信息。
如果我的数据层在另一个项目中,可以/应该使用web.config作为配置信息吗?
如果是这样,单元测试(通常在单独的组件中)将如何提供soch配置信息?
感谢您的时间!
asp.net web-config data-access-layer 3-tier n-tier-architecture
我有一个名为"ReportController.aspx"的页面,其目的是基于查询字符串参数实例化报表(类)
switch (Request.QueryString["Report"])
{
case "ReportA":
CreateReportAReport("ReportA's Title");
break;
case "ReportB":
CreateReportBReport("ReportB's Title");
break;
case "ReportC":
CreateReportCReport("ReportC's Title");
break;
case "ReportD":
CreateReportDReport("ReportD's Title");
break;
...
Run Code Online (Sandbox Code Playgroud)
基本上,每次需要新报告时,都会有添加案例和添加方法的开销.这个switch语句可能会变得非常长.我读过可以使用Dictionary将报告映射到?.这看起来如何使用字典(假设这是一种更好的方式).
此外,CreateReportXReport方法基本上将一堆额外的QueryString值传递给报表类的构造函数(每个报表类都有不同的构造函数).
Firefox正在向我的ASP.Net网站发出重复请求.它将请求一个页面,获得响应,然后立即再次发出相同的请求(好吧,几乎相同 - 见下文).这发生在这个特定网站的每个页面上(但不是任何其他网站).IE不会这样做,但Chrome也会这样做.
我已经确认响应中没有Location标头,并且页面中没有Javascript或meta标签会导致页面被重新请求(如果其中任何一个都是真的,IE也会重新请求页面) .
我已在多台计算机上的多个Firefox安装上确认了此行为.版本各不相同,但都是3.x.
两个请求之间的唯一区别是Accepts标头.对于第一个请求,它看起来像这样:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)
对于第二个请求,它看起来像这样:
Accept: */*
Run Code Online (Sandbox Code Playgroud)
在所有情况下,Content-Type响应头是:
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
其他奇怪的东西 - 即使Firefox请求页面两次,它使用第一个响应并丢弃第二个响应.我把一个计数器放在一个页面上,该页面随着每个请求递增.我可以看到回复(通过查尔斯代理).Firefox将首次获得"1",第二次获得"2".但由于某种原因,它会显示"1".
Chrome表现出完全相同的行为.考虑到Accepts标题的不同,我怀疑这是一个协议级问题,但我以前从未见过这个问题.
我有以下代码,如果我最后使用conn == null,我仍然使用连接池?我知道关闭连接是一个好习惯但是如何处理整个连接对象?
public void ExecuteNonQuery(SqlCommand Cmd)
{
//========== Connection ==========//
SqlConnection Conn = new SqlConnection(strConStr);
try
{
//========== Open Connection ==========//
Conn.Open();
//========== Execute Command ==========//
Cmd.Connection = Conn;
Cmd.CommandTimeout = 180;
Cmd.ExecuteNonQuery();
}
catch (Exception Exc)
{
throw Exc;
}
finally
{
//======== Closing Connection ========//
if (Conn.State == ConnectionState.Open)
{ Conn.Close(); }
//======== Disposing object ========//
Conn = null;
}
}
Run Code Online (Sandbox Code Playgroud) 如果在参数替换后有一种简单的方法可以获得完整的SQL语句?即,我想保留该程序运行的所有SQL的日志文件.
或者,如果我想这样做,我只想摆脱参数,并用一个大字符串完成旧学校的整个查询吗?
简单示例:我想捕获输出:
SELECT subcatId FROM EnrollmentSubCategory WHERE catid = 1
..来自这段代码:
Dim subCatSQL As String = "SELECT subcatId FROM EnrollmentSubCategory WHERE catid = @catId"
Dim connectionString As String = "X"
Dim conn As New SqlConnection(connectionString)
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
Dim cmd As New SqlCommand(subCatSQL, conn)
With cmd
.Parameters.Add(New SqlParameter("@catId", SqlDbType.Int, 1))
End With
Console.WriteLine("Before: " + cmd.CommandText)
cmd.Prepare()
Console.WriteLine("After: " + cmd.CommandText)
Run Code Online (Sandbox Code Playgroud)
我曾假设Prepare()会做替换,但显然不是.
思考?建议吗?提前致谢.
我想知道如何使用内部连接器以其他方式选择一列两次.我的数据库是sqlite,我使用PDO db驱动程序.
我的例子:
SELECT
orders.id,
orders.order_number,
clients.first_name,
clients.last_name,
users.name AS user_name
FROM orders
INNER JOIN clients ON
orders.client_id = clients.id
INNER JOIN users ON
orders.created_by = users.id
Run Code Online (Sandbox Code Playgroud)
我也想得到编辑此记录的user_name
orders.edited_by = users.id
Run Code Online (Sandbox Code Playgroud)
如何加入此选择?
asp.net ×6
.net ×5
c# ×3
3-tier ×2
ado.net ×2
sql ×2
vb.net ×2
asp.net-3.5 ×1
c#-to-vb.net ×1
firefox ×1
http ×1
http-headers ×1
linq ×1
mime-types ×1
pdo ×1
sql-server ×1
sqlcommand ×1
sqlite ×1
web-config ×1