小编Cra*_*aig的帖子

Asp.net MVC用JQuery填充一个列表框?

我在表格的下拉框中有一个Payees列表.我想根据收款人下拉列表的选定项目填充不同的下拉菜单,而不是回发邮件等等.

所以,我在我的控制器中创建了一个方法来完成工作:

        private JsonResult GetCategories(int payeeId)
    {
        List<CategoryDto> cats = Services.CategoryServices.GetCategoriesByPayeeId(payeeId);
        List<SelectListItem> items = new List<SelectListItem>();

        foreach(var cat in cats)
        {
            items.Add(new SelectListItem {Text = cat.Description, Value = cat.CategoryId.ToString()});
        }

        return Json(items);

    }
Run Code Online (Sandbox Code Playgroud)

现在,我不确定要添加到我的视图中以使其工作.

目前,我所拥有的只是:

 <% using (Html.BeginForm())
   {%>

   <p>
   <%=Html.DropDownList("SelectedAccountId", Model.Accounts, "Select One..", null) %>
   </p>
   <p>
   <%=Html.DropDownList("SelectedPayeeId", Model.Payees, "Select One...", null) %>
   </p>

                         <input type="submit" value="Save" />
<%
    }%>
Run Code Online (Sandbox Code Playgroud)

它们填充得很好......所以当用户选择SelectedPayeeId下拉列表时,它应该根据SelectedPayeeId填充一个新的(尚未创建?)下拉列表,该下拉列表包含类别.

所以,我认为我需要创建一个JQuery函数(从未完成JQuery ..所以甚至不确定它去哪里)哪个监视onchange事件的Payee下拉?然后调用我在上面创建的方法.这听起来是对的,如果是的话,你可以指导我如何实现这个目标吗?

c# asp.net-mvc jquery json

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

人们要求我修复 N+1 错误?

我从未听说过,但人们将应用程序中的问题称为“N+1 问题”。他们正在做一个基于 Linq to SQL 的项目,有人发现了一个性能问题。我不太明白 - 但希望有人能引导我。

似乎他们正在尝试获取 obects 列表,然后在此之后的 Foreach 导致过多的数据库命中:

据我了解,源代码的第二部分仅在 forwach 中加载。

因此,加载的项目列表:

var program = programRepository.SingleOrDefault(r => r.ProgramDetailId == programDetailId);
Run Code Online (Sandbox Code Playgroud)

然后,我们使用这个列表:

foreach (var phase in program.Program_Phases)
{
    phase.Program_Stages.AddRange(stages.Where(s => s.PhaseId == phase.PhaseId));
    phase.Program_Stages.ForEach(s =>
    {
         s.Program_Modules.AddRange(modules.Where(m => m.StageId == s.StageId));
    });
    phase.Program_Modules.AddRange(modules.Where(m => m.PhaseId == phase.PhaseId));
}
Run Code Online (Sandbox Code Playgroud)

似乎确定的问题是,他们希望“程序”包含它的孩子。但是当我们在查询中引用孩子时,它会重新加载程序:

program.Program_Phases
Run Code Online (Sandbox Code Playgroud)

他们期望程序完全加载并在内存中,并且分析器似乎表明该程序表,所有连接都在每个“foreach”上被调用。

这有意义吗?

(编辑:我找到了这个链接: linq to sql 会自动延迟加载关联实体吗? 这可能会回答我的问题,但是 .. 他们正在使用更好的 (where person in...) 符号,而不是这个奇怪的 (x => x....)所以如果这个链接是答案——也就是说,我们需要“加入”查询——可以做到吗?)

c# linq-to-sql

3
推荐指数
1
解决办法
954
查看次数

这个VB6方法在做什么?

我们正在将VB6应用程序转换为C#(4.0).并且在VB6中遇到了我们正在努力理解的方法.

Public Sub SaveToField(fldAttach As ADODB.Field)
    Dim bData() As Byte
    Dim nSize As Long

    nSize = Len(m_sEmail)
    bData = LngToByteArray(nSize)
    fldAttach.AppendChunk bData

    If nSize > 0 Then
        bData = StringToByteArray(m_sEmail)
        fldAttach.AppendChunk bData
    End If

    nSize = Len(m_sName)
    bData = LngToByteArray(nSize)
    fldAttach.AppendChunk bData
    If nSize > 0 Then
        bData = StringToByteArray(m_sName)
        fldAttach.AppendChunk bData
    End If

    bData = LngToByteArray(m_nContactID)
    fldAttach.AppendChunk bData

End Sub
Run Code Online (Sandbox Code Playgroud)

看起来它正在做一些二进制文件复制类型的东西,但我不太了解.有人可以解释一下,我们可以重写它吗?

vb6

3
推荐指数
1
解决办法
614
查看次数

TextFile的DataTable?

我接管了另一个开发人员编写的应用程序,该应用程序从数据库中读取数据并将其导出.

开发人员使用DataTables和DataAdaptors.

所以,

 _dataAdapter = new SqlDataAdapter("Select * From C....", myConnection);
Run Code Online (Sandbox Code Playgroud)

然后

ExtractedData = new DataTable("CreditCards");
_dataAdapter.Fill(ExtractedData);
Run Code Online (Sandbox Code Playgroud)

然后传递ExtractedData以执行不同的功能.

我现在被告知,除此之外,我需要从一些逗号分隔的文本文件中获取相同格式的数据.应用程序执行相同的处理 - 它只是从两个来源获取数据.

所以,我想知道我是否可以将数据读入DataTable,如上所述,然后从CSV文件中添加更多记录.

这可能吗?

c# datatable sqldataadapter

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

WCF服务和对象构造函数

我只是在学习WCF服务.我有一个方法返回我创建的名为GPSPosition的对象.GPS位置对象具有纬度和经度.没有这些属性,对象永远不应该存在.所以,我想让构造函数接受Lat和Long浮点数.因此,在创建对象时,将设置值,并且永远不会无效(Unset).

但是,它是我的WCF服务的一个对象.可以作为我的调用应用程序使用的WCF服务对象有一个构造函数吗?如果我var position = new GpsPosition{ lat=1, lon=1 };在我的调用代码中,构造函数是否可以工作?你能在WCF类中拥有构造函数吗?

我认为它们是在不同语言之间共享的 - 例如,如果Java使用该服务,我不确定构造函数将如何触发.对象结构与调用应用程序共享,不是吗?你可以在构造函数中启动.net代码(对于那种情况,还有getter和setter方法)?

如果构造函数不可用 - 有没有办法确保我的对象永远无效?(必须在-180和+180之间有有效的纬度/经度值)?

c# wcf serialization

3
推荐指数
1
解决办法
5831
查看次数

使用MVC模型显示只读文本

我有一个MVC模型,其属性定义为:

[DisplayName("Service Version")]
public string ServiceVersion { get; set; }
Run Code Online (Sandbox Code Playgroud)

在屏幕上,我希望它显示为:

服务版本:0.1

'ServiceVersion'具有版本号.

在视图中,我有:

@model Main_UI.Models.HomeModel
Run Code Online (Sandbox Code Playgroud)

然后:

@Html.LabelFor(m=>m.ServiceVersion) @Html.DisplayText(Model.ServiceVersion)
Run Code Online (Sandbox Code Playgroud)

这是不正确的,因为我没有为值部分显示任何内容.出现标签,但没有版本号.我究竟做错了什么?

编辑:更改

@ Html.DisplayText(Model.ServiceVersion)

,只是

@ Model.ServiceVersion

修好了.这是正确的方法吗?

c# asp.net-mvc asp.net-mvc-4

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

Asp.Net,SQL和TimeZones

有人问过,但我正在努力掌握如何在网络应用中处理时区的概念.我有一个跟踪项目进度的系统.我的SQL Server数据库中有一个ProjectStartDate DATE.(还有一些字段和表格,但让我们关注一个).

服务器位于美国的某个地方.我住在澳大利亚.

致电SELECT GETDATE()返回"2013-08-11 14:40:50.630"我的系统时钟显示"2013-08-12 07:40"

在我的数据库中,我在所有表上都有'CreateDateTime'列.当我存储它时,在我的c#代码中,我使用CreateDate = DateTime.UtcNow

我使用它,因为我听说使用UTC更好.

但是,当向用户显示日历控件并为项目选择开始日期时,我会存储用户选择的内容.没有转换......正如我所说,StartDate是数据库中的DATE类型.

问题是,如果一个项目今天开始 - 我的前端说当前项目是No Started,因为服务器仍然在昨天.

我认为日期应该存储,因为我存储它们.但也许我需要以某种方式获取用户时区,并在UI级别应用它?

我看到的问题是:

  • 我不知道用户的时区.添加一些东西让他们选择它?
  • 项目的状态可能在存储过程中确定,所以我什么时候可以应用转换?在proc中,它可能会进行检查,如果StartDate <= DateTime.Now,则返回一个声明为"Not Started"的VARCHAR?

我使用EntityFramework和Linq来获取大部分时间的数据.我需要一种从SQL意义和.Net意义上插入和检索数据的策略.

我添加了代码以让用户根据此选择他们的时区:

public List<TimeZoneDto> GetTimeZones()
{
    var zones = TimeZoneInfo.GetSystemTimeZones();
    var result = zones.Select(tz => new TimeZoneDto
        {
            Id = tz.Id, 
            Description = tz.DisplayName
        }).ToList();

    return result;
}
Run Code Online (Sandbox Code Playgroud)

然后,这就是他们的个人资料.

所有日期都以UTC格式存储,如下面的答案所示.

我仍然很困惑如何处理他们往返数据库和客户端的日期.以下是我存储记录的示例:

public int SaveNonAvailibility(PersonNonAvailibilityDto n)
{
    person_non_availibility o;

    if (n.Id == 0)
    {
        o = new person_non_availibility
            {
                PersonId = n.PersonId,
                Reason = …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net timezone

3
推荐指数
1
解决办法
3104
查看次数

SQL Service Broker - 服务器主体"sa"无法访问

尝试从我的数据库发送邮件时收到权限错误.

我推荐了proker服务:

-- Enable Broker on Initiator
ALTER DATABASE A-DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE A-DB SET ENABLE_BROKER;
ALTER AUTHORIZATION ON DATABASE::A-DB TO [sa];
ALTER DATABASE A-DB SET TRUSTWORTHY ON;
ALTER DATABASE A-DB SET MULTI_USER;
GO
Run Code Online (Sandbox Code Playgroud)

然后我创建队列和所有...

当我尝试发送消息时,我在sys.transmission_queue中看到以下错误:

在目标队列中排队消息时发生异常.错误:916,状态:3.服务器主体"sa"无法访问当前安全上下文下的数据库"MYDBNAME".

(其中MYDBNAME是我们正在使用的数据库的名称)

我认为错误是由这一行引起的:

更改数据库上的授权:: A-DB TO [sa];

那可能是件坏事.但是,我可以更改授权以将其恢复到原来的状态吗?我认为这将是'dbo',但那不对.是否应该设置为谁创建了数据库?

sql-server service-broker

3
推荐指数
1
解决办法
7809
查看次数

将Byte []转换为Double

我有一个字节[8],实际上是一个序号.它来自数据库中的RowVersion.

我真的只关心8字节数组的最后4个字节.

我想这样做:

 Version = BitConverter.ToDouble(t.Version,4)
Run Code Online (Sandbox Code Playgroud)

'版本'是双倍的.但是,我得到一个错误说:

目标数组不够长,无法复制集合中的所有项目.检查数组索引和长度.

我的'版本'的价值是:

[0] 0 [1] 0 [2] 0 [3] 0 [4] 0 [5] 0 [6] 12 [7] 102

我究竟做错了什么?

c#

3
推荐指数
1
解决办法
3553
查看次数

在 Blazor 客户端中存储 JWT 令牌

我正在尝试我的第一个 Blazor 应用程序,客户端,并且正在与身份验证作斗争。我已经设法调用我的 API,获取令牌并在应用程序中进行身份验证。我需要将 JWT 令牌存储在某个地方 - 我认为,在声明中,可能没问题。(也许这是我出错的地方,应该以某种方式在 LocalStorage 或其他地方?)

因此,对于我的授权,我有一个AuthenticationStateProvider, where - 一切正常。我得到认证。但我无法访问我的令牌。

这是添加它的正确位置吗?如果是这样,为什么这段代码让我失望?

    public class CustomAuthenticationStaterProvider : AuthenticationStateProvider
    {
        public override Task<AuthenticationState> GetAuthenticationStateAsync()
        {
            var identity = new ClaimsIdentity();

            var user = new ClaimsPrincipal(identity);

            return Task.FromResult(new AuthenticationState(user));
        }

        public void AuthenticateUser(AuthenticationResponse request)
        {
            if (request.ResponseDetails.IsSuccess == false)
                return;

            var identity = new ClaimsIdentity(new[]
            {
                new Claim("token", request.Token),
                new Claim(ClaimTypes.Email, request.Email),
                new Claim(ClaimTypes.Name, $"{request.Firstname} {request.Surname}"),
            }, "apiauth_type");

            var user = new ClaimsPrincipal(identity);

            NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(user)));
        }

        public void …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core blazor

3
推荐指数
1
解决办法
2415
查看次数