小编Sea*_*son的帖子

使用JSON将方括号表示法数组从javascript转换为C#?

我有这个:

var testArray = [];
testArray["First"] = "First Test Data";
testArray["Second"] = "Second Test Data";
$.toJSON(testArray);
Run Code Online (Sandbox Code Playgroud)

然后我将它传递回服务器端.当我在处理AJAX请求时查看对象服务器端时,我所拥有的只是"[]".

有没有办法做到这一点或类似的东西,以实现查找从客户端传回的数据的能力?

javascript c# json

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

从通用字典中删除项目?

我有这个:

public static void Remove<T>(string controlID) where T: new()
{
    Logger.InfoFormat("Removing control {0}", controlID);
    T states = RadControlStates.GetStates<T>();

    //Not correct.
    (states as SerializableDictionary<string, object>).Remove(controlID);
    RadControlStates.SetStates<T>(states);
}
Run Code Online (Sandbox Code Playgroud)

states将始终是带有字符串键的SerializableDictionary.值的类型各不相同.有没有办法表达这个?转换为SerializableDictioanry<string, object>始终产生null.

c# refactoring templating

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

迭代集合并修改它的最佳实践?

我试图迭代一组项目,执行一个操作,然后删除当前索引处的项目.

我目前实现的方式是这样的:

foreach (CormantRadPane pane in GetPanes().ToList())
{
    pane.Clear();
    StateManager.Remove(pane);
    LayoutManager.Instance.RegisteredPanes.Remove(pane);
    Items.Remove(pane);
}
Run Code Online (Sandbox Code Playgroud)

通过调用ToList,我创建了一个集合的副本,但保留了对第一个集合中每个对象的引用.这允许我迭代GetPanes的集合返回,而无需"技术上"修改集合.

这显然很容易让一些人难以追查错误.以干净的方式执行此类逻辑的标准方法是什么,但是对于正在发生的事情的复杂性也更清楚?

我做了一些环顾四周,看到了诸如使用for循环并在列表中向后移动的东西,但这看起来真的很笨重.保持第二个项目列表"删除"然后在第一个循环完成后遍历该列表,删除第二个列表中找到的每个对象,我的感受大致相同.

你怎么处理它?谢谢.

c# collections foreach

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

PC上的谷歌浏览器在document.createEvent("TouchEvent")上取得了成功......?

此代码段曾用于工作.我认为谷歌Chrome最近的更新打破了它.有没有人看到这个?

function DenyIfTablet() {
    try {
        document.createEvent("TouchEvent");
        alert("Silverlight not supported on touch-screen devices.");
        window.location = document.referrer;
    }
    catch(exception){ 
        //OK to continue.
    }
}
Run Code Online (Sandbox Code Playgroud)

在IE9下,抛出异常并且不会发生警报/重定向.

在Chrome 17.0.963.43下,即使我没有使用触摸屏设备,也不会抛出异常并重定向.

我在这里做了一些不正确的事情,还是在Chrome更新中将地毯拉到了我的下方?

silverlight jquery google-chrome tablet

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

SQL - 将NULL转换为string.empty

我正在尝试对我们的数据库执行一些升级维护.我需要从一个表的所有行移动3列数据,并将该数据作为新行插入新表中.

INSERT INTO [dbo].[SnmpSettings]([NetworkDiscoveryId], [RoCommunities], [RwCommunities])
    SELECT id, Ro_Community, RW_Communities
    FROM [dbo].[Network_Discovery] 
Run Code Online (Sandbox Code Playgroud)

上面的代码可以正常工作,但Ro_Community和RW_Communities允许NULL,因为RoCommunities和RwCommunities不允许NULL.我应该如何将NULL转换为空字符串然后插入到我的新表中?

编辑:

INSERT INTO [dbo].[SnmpSettings]([NetworkDiscoveryId], [RoCommunities], [RwCommunities])
    SELECT id, Ro_Community, RW_Communities
    ISNULL(Ro_Community,'')
    FROM [dbo].[Network_Discovery] 


Msg 102, Level 15, State 1, Line 27
Incorrect syntax near 'Ro_Community'.
Run Code Online (Sandbox Code Playgroud)

sql

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

下划线没有采用模型阵列?

var currentVideos = this.get('items').pluck('video');

//  TODO: Why does pluck not work here?
var currentVideosDurations = _.map(currentVideos, function (currentVideo) {
    return currentVideo.get('duration');
});

var test = _.pluck(currentVideos, 'duration');
console.log("Test:", test);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我的第二次采摘不起作用,但我的地图工作得很好?我认为这些是等效的用法.

这是显示this.get('items')和currentVideos数组的控制台日志的屏幕截图.

在此输入图像描述

javascript backbone.js underscore.js

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

如何指示 Web API 2 成功?

我正在向我的服务器发出 PATCH 请求以更新标题:

$.ajax({
    url: Settings.get('serverURL') + 'Playlist/UpdateTitle',
    type: 'PATCH',
    dataType: 'json',
    data: {
        id: model.get('id'),
        title: title
    },
    success: function () {
        console.log("Success!");
    },
    error: function (error) {
        console.error("Failure!");
    }
});

[Route("UpdateTitle")]
[HttpPatch]
public IHttpActionResult UpdateTitle(PlaylistDto playlistDto)
{
    using (ITransaction transaction = Session.BeginTransaction())
    {
        PlaylistManager.UpdateTitle(playlistDto.Id, playlistDto.Title);

        transaction.Commit();
    }

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

除了执行 ajax 请求的错误回调而不是成功回调之外,一切都运行良好。

在Web API 2之前,我使用以下方法没有出现问题。显然,问题是我返回 Ok 结果而不是 JSON 成功对象:

[HttpPost]
public JsonResult UpdateTitle(Guid playlistId, string title)
{
    using (ITransaction transaction = Session.BeginTransaction())
    {
        PlaylistManager.UpdateTitle(playlistId, title);

        transaction.Commit();
    } …
Run Code Online (Sandbox Code Playgroud)

c# ajax asp.net-web-api asp.net-web-api2

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

使用OData的Web API 2修补程序 - 如何最好地处理区分大小写?

我正在从客户端将JSON修补到我的Web API 2控制器.

请求如下:

Request URL: http://localhost:28029/PlaylistItem/5df2b99f-e021-4c81-8ff5-a34c013470aa
Request Payload: { sequence: 5000 }
Run Code Online (Sandbox Code Playgroud)

我的控制器的方法如下:

[Route("{id:guid}")]
[HttpPatch]
public void Patch(Guid id, Delta<PlaylistItemDto> playlistItemDto)
{
}
Run Code Online (Sandbox Code Playgroud)

PlaylistItemDto的位置如下:

public class PlaylistItemDto
{
    public Guid PlaylistId { get; set; }
    public Guid Id { get; set; }
    public int Sequence { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

这成功地向控制器发送请求,但由于区分大小写,无法正常工作.OData库未正确将序列转换为Sequence.

我找到了一个关于这个问题的线程,asp.net mvc web api使用OData Patch进行部分更新,但我发现解决方案很黯淡.这个问题目前没有解决方案吗?区分大小写似乎是从客户端到服务器的PATCHing JSON数据的一个非常常见的用例.

json asp.net-web-api2

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

我应该在多大程度上强制执行DOM元素的ID的唯一性?

我遇到了一个有两个可能解决方案的问题.我不确定哪种解决方案"更正确".

我有一个在页面上方打开的模态对话框.该对话框托管ID为"foo"的元素.

现在,这根本不是一个问题.但是,非对话框页面有多个选项卡.其中一个标签,在某些内容的深处,也有一个ID"foo".这会导致奇怪的,间歇性的问题,这取决于在遍历DOM树时首先遇到"foo".

不幸的是,两个值都以完全相同的方式呈现完全相同的信息.唯一的区别是一个是在对话框中托管.正在使用相同的模型 - 因此我的ViewModel生成了相同的ID.

我可以做两件事之一:

  • 显式覆盖其中一个ID创建方法,以确保在对话框中生成的ID与非对话框的ID相比是唯一的.
  • 修改我的jQuery搜索选择器只能向内读取对话框的表单 - 确保对话框不会捕获意外的DOM元素.

似乎第二个想法是更好的做法.我遍历较少的DOM节点,并且不必破解任何内容.然而,对于一个不知情的开发人员,人们仍然可能通过不从适当的区域开始搜索而意外地重新引入此问题.

但是,对于从事我们应用程序的开发人员来说,可以说同样的问题.他们需要明确知道覆盖ViewModel的ID创建,以便它不会创建相同的ID.

如果它们以不同的形式封装,那么重复ID是否可以接受?身份证的独特性在哪里停止有意义?

该ID是通过MVC的EditorFor HTML Helper生成的.我可以通过生成特定于表单的ID来覆盖它,但这显然不是MVC的意图.

<%= Html.EditorFor(model => model.CustomerDisplayName) %>
Run Code Online (Sandbox Code Playgroud)

更新:似乎我应该强制执行ID唯一性.但是,ASP.NET MVC3似乎并没有提供一种简单的方法来确保ID是DOM独有的.我可以附加表单的ID,但这会产生巨大的ID ..不确定这是否是最好的调用.有什么想法吗?

html javascript jquery dom asp.net-mvc-3

0
推荐指数
1
解决办法
539
查看次数

用sinon监视方法。方法绑定到事件侦听器。方法已执行,但.callOnce是否为假?

我的代码正常运行,但是我的测试用例由于其期望之一而失败。我不明白为什么我的间谍无法相信方法已经执行。

我像这样绑定事件监听器:

var playlists = Backbone.Collection.extend({
    initialize: function(){
        this.on('add', this._onAdd);
    },

    //  Method:
    _onAdd: function (model, collection, options) {
        console.log('onAdd');
        this._foo();
    },

    _foo: function(){
        console.log('foo');
    }
});

Playlists = new playlists();
Run Code Online (Sandbox Code Playgroud)

我正在用sinon监视我的对象:

it('should call _onAdd when adding a model to the collection', function() {
    sinon.spy(Playlists, '_onAdd');
    sinon.spy(Playlists, '_foo');

    Playlists.add({});
    expect(Playlists._onAdd.calledOnce).to.equal(true);
    expect(Playlists._foo.calledOnce).to.equal(true);

    Playlists._onAdd.restore();
    Playlist._foo.restore();
});
Run Code Online (Sandbox Code Playgroud)

我的测试用例失败了,因为期望_onAdd一次被调用是不正确的。但是,_foo一次被调用的期望正确的。

我在监视事件监听器方面做得不正确。为什么sinon不相信_onAdd被称为。我该如何纠正?

javascript backbone.js sinon

0
推荐指数
1
解决办法
2795
查看次数

jQuery select无法按ID查找表单,但在选择所有表单时有效

我试图使用jQuery通过ID选择一个表单.目前,我的代码无法通过ID查找表单.但是,使用jQuery选择页面上的所有表单确实选择表单并显示相应的ID.关于为什么会发生这种情况的唯一想法可能是我的表单的ID使用了无效字符.

console.log("Forms:", $('form'));
console.log("OrderDetailsForm:", $('form#CableSolve.Web.Models.Workflow.ExistingOrderDetailsModel'));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

javascript jquery

-1
推荐指数
1
解决办法
298
查看次数