假设您有3层:UI,业务,数据.
如果Business层需要访问Sessions,这是否是设计不佳的标志?关于它的一些事情感觉不对.是否有专门针对Web应用程序定制的指南?
我使用c#2.0 .net
我的下拉列表是从数据库中填充的,如下所示:
DataTable dt = GetData(); ddlMylist.DataSource = dt; ddlMylist.DataBind();
现在dt包含数据,我希望在选择为空白时将"选择"字添加到列表顶部.似乎除了将它添加到dt(DataTable对象)之外没有其他选项....但是它似乎在某种程度上是错误的.
还有什么其他选择.它不一定是单词"选择"它可以只是一个空的空间...目前,在页面加载时我可以看到列表中的第一个数据项是好的和花花公子,但我有3个下降这是相互依赖的,我希望用户明确地做出一个选择,这将触发其他下拉相应的填充.
如何优雅地实现错误处理?例如,我的数据访问层可能会抛出两种类型的错误:1)未授权访问,在这种情况下,页面应隐藏所有内容,只显示错误消息2)错误,告知用户此类内容已存在于数据库(例如,名称不是唯一的 - 例如),在这种情况下,我不想隐藏所有内容.
编辑:
由于这里的一些评论,我设计了我应该创建派生的专用异常类型,例如NotAuthorizedException,DuplicateException等等......它都很好,但是我可以看到2个问题:
1)每个存储过程都有一个返回字段p_error,其中包含一条错误消息.从DB获取数据后,我需要检查此字段以查看已返回的错误类型,因此我可以抛出适当的异常.所以,我仍然需要在某处存储我的错误类型/错误消息.....换句话说,我应该如何向用户发送确切的消息(在某些时候我需要),而不是先检查p_error字段.什么让我回到错误对象.任何人?
2)我可能会变成一场噩梦,其中异常的数量等于错误消息类型的数量.
我在这里错过了什么吗?
非常感谢大家!
在ASP.net Web服务中,如果未指定上述内容,默认情况下响应格式是什么?另外,如果我的网络服务如下:
[WebMethod()]
public List<Sample> GenerateSamples(string[][] data)
{
ResultsFactory f = new ResultsFactory(data);
List<Sample> samples = f.GenerateSamples();
return samples;
}
Run Code Online (Sandbox Code Playgroud)
返回对象列表,如果我将响应格式更改为JSON,我必须将返回类型更改为字符串,然后如何在我的javascript中访问对象?
目前我在我的JS中调用此Web服务,例如:
$.ajax({
type: "POST",
url: "http://localhost/TemplateWebService/Service.asmx/GenerateSamples",
data: jsonText,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(response) {
var samples = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
if (samples.length > 0) {
doSomethingHere(samples);
} else {
alert("No samples have been generated");
}
},
error: function(xhr, status, error) {
var msg = JSON.parse(xhr.responseText);
alert(msg.Message);
}
}); …Run Code Online (Sandbox Code Playgroud) HTML
<tr id="rowId"><td><textarea class="inputTextarea"></textarea></td><td><textarea class="inputTextarea"></textarea></td></tr>
<tr id="rowId2"><td><textarea class="inputTextarea"></textarea></td><td><textarea class="inputTextarea"></textarea></td></tr>
<tr id="rowId3"><td><textarea class="inputTextarea"></textarea></td><td><textarea class="inputTextarea"></textarea></td></tr>
Run Code Online (Sandbox Code Playgroud)
如果我知道rowId,我如何从任何仲裁点开始在这个页面上找到下一个textarea.我不是指任何输入,只是textarea.我需要能够从任何行开始,然后继续前进到下一个textarea,基本上是沿着行向下行进.
编辑基于答案,我使用以下代码逐行遍历textareas:
var curElt = $('#' + startAt); //startAt is the first row id
for(var i=1; i < 10; i++) {
$(curElt).find('textarea').eq(0).val(i);
$(curElt).find('textarea').eq(1).val(i+1);
curElt = $(curElt).next();
}
Run Code Online (Sandbox Code Playgroud) 我的HTML
<TR class="datarow" id="rowId"><TD>1</TD><TD>895171</TD><td class="classID"><INPUT type="checkbox" /></TD></TR>
Run Code Online (Sandbox Code Playgroud)
我如何使用Jquery来确定是否选中了此特定行中的复选框.假设我知道唯一的rowId.
目前,我正在这样做
var checkbox = $('#' + rowId + " td input:checkbox");
if (checkbox.checked) {
alert("checked");
} else {
alert("unchecked");
}
Run Code Online (Sandbox Code Playgroud)
但是,当检查复选框时,似乎没有检测到.
编辑奇怪的是,以下内容也不起作用:
var curRow = $('#' + curRowId);
var checkbox = $(curRow).find('input:checkbox').eq(0);
if (checkbox.checked) {
alert("checked");
} else {
alert("unchecked");
}
Run Code Online (Sandbox Code Playgroud) 我知道可以使用这个功能
@Url.Action("MyInfo", "Home")
Run Code Online (Sandbox Code Playgroud)
避免网址的硬编码,但我的$.ajax调用是在一个单独的.js文件中.以上仍然有效吗?
据我所知,该@Url.Action遗嘱只能在Razor文件中使用.但考虑到我们被建议使用非突兀的JS,我不太清楚如何使用它@Url.Action.
请指教.
当jquery $ .ajax函数调用asp.net MVC控件时,我偶然发现了一个非常奇怪的性能不佳问题.该控件执行的数据库操作需要403毫秒,但根据Firebug,总的$ .ajax调用是3400毫秒,这是相当多的额外开销.我需要优化性能,但我不清楚这种开销来自何处.
这是代码.在我的控制器中,我有
public JsonResult SetSearchResults(Criteria searchCriteria)
{
SearchResult myReportsResult = _repository.GetResults(searchCriteria);
//the statement above takes 403 ms
return Json(myReportsResult);
}
public SearchResult GetResults(SearchCriteria searchCriteria)
{
SearchResult result = SearchResult();
DataTable dbResults = _da.GetDBResults(searchCriteria);
List<IncidentReportHeader> irs = new List<IncidentReportHeader>();
for (int i = 0; i < dbResults.Rows.Count; i++)
{
IncidentReportHeader ir = new IncidentReportHeader();
//populate all the properties of the ir object here,
irs.Add(ir);
}
result.Reports = irs;
return result;
}
//models
public class SearchResult
{
private …Run Code Online (Sandbox Code Playgroud) 我在Controller中有以下操作
public ActionResult DownloadExcel()
{
//create and populate Excel file here
C1XLBook testBook = new C1XLBook();
//populate it here
MemoryStream ms = new MemoryStream();
testBook.Save(ms, FileFormat.Biff8);
return File(ms, "application/ms-excel", "test-file.xls");
}
Run Code Online (Sandbox Code Playgroud)
打开文件时,我收到Excel消息,指出该文件与扩展名不匹配,文件打开已损坏.
如果我将文件保存在硬盘驱动器上并从那里返回,一切都很好:
return base.File(@"C:\LOGS\test-file.xls", "application/ms-excel", "test-excel.xls");
Run Code Online (Sandbox Code Playgroud)
我最初认为保存功能在将其保存到MemoryStream时会破坏它,所以我保存并重新加载它并且很好地传回给用户 - 当保存在硬盘驱动器上并从那里返回时,而不是从的MemoryStream
有任何想法吗?我不太喜欢将文件保存在硬盘上....此外我应该能够将它保存到MemoryStream并从那里返回它?
我有一个预感,也许MemoryStream不应该用于返回MVC中的文件,因为每个请求都是隔离的?
我在Razor里面一直使用这样的东西
@section Includes {
<script type="text/javascript">
var somestuffneeded = @(Html.Raw(Json.Encode(Model.datamember)));
</script>
}
Run Code Online (Sandbox Code Playgroud)
但这看起来并不那么干净,因为它与布局位于同一个文件中(因为它不能直接从.js文件中运行).访问和查看ViewModel的任何干净的替代方法都在.js文件中传递?
jquery ×4
c# ×3
javascript ×2
ajax ×1
asp.net ×1
asp.net-mvc ×1
dom ×1
excel ×1
memorystream ×1
razor ×1
session ×1
url ×1
viewmodel ×1
web-services ×1