小编Dan*_* T.的帖子

在ASP.NET MVC 2中,我可以使用默认的ModelBinder将查询字符串反序列化为数组吗?

在ASP.NET MVC 2中,您可以使用此URL和此控制器方法:

GET http://server/controller/get?id=5

public ActionResult Get(int id)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

ModelBinder会将id=5查询字符串转换id = (int) 5为方法参数.但是,这不起作用:

GET http://server/controller/get?idlist=1,2,3,4,5

public ActionResult Get(int[] idlist)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

idlist参数中将为null.虽然对此进行解析非常简单,但我想知道是否有办法更改方法签名或查询字符串以使默认的ModelBinder自动反序列化数组/集合?

c# url asp.net-mvc modelbinders asp.net-mvc-2

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

是否有可能在ASP.NET MVC路径到达控制器之前更改它的querystring变量?

我在ASP.NET MVC中有一个控制器方法,如下所示:

public ActionResult GetAlbumPictures(int albumId)
{
    var album = AlbumRepo.GetSingle(albumId);
    var pictures = album.Pictures;
    return View(pictures);
}
Run Code Online (Sandbox Code Playgroud)

此方法的路由如下所示:

routes.MapRoute(null,
                "pictures"
                new { controller = "Album", action = "GetAlbumPictures" });
Run Code Online (Sandbox Code Playgroud)

用户将使用以下URL获取图片,按照相册ID进行过滤:

GET http://server/pictures?albumid=10
Run Code Online (Sandbox Code Playgroud)

但是,我想将querystring参数更改为album而不是albumid:

GET http://server/pictures?album=10
Run Code Online (Sandbox Code Playgroud)

这意味着需要将控制器方法修改为:

public ActionResult GetPictures(int album)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

然而,这是不理想的,因为现在的方法有一个名为参数album,其可以被混淆为Album 对象来代替IDAlbum.

我的问题是,是否有任何方法配置ASP.NET MVC,以便在路由中,它将接收一个调用的查询字符串参数album,但然后将其作为albumId参数传递给控制器?

PS我知道我可以在路由表中执行此操作:

routes.MapRoute(null,
                "album/{albumId}/pictures",
                new { controller = "Album", action = "GetAlbumPictures" });
Run Code Online (Sandbox Code Playgroud)

但由于遗留问题,我必须使其适用于查询字符串方法.

c# asp.net-mvc routing query-string asp.net-mvc-3

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

有没有办法在变量中声明Groovy字符串格式?

我目前有一个资产管理代码的固定格式,它使用美元符号使用Groovy字符串格式:

def code = "ITN${departmentNumber}${randomString}"
Run Code Online (Sandbox Code Playgroud)

这将生成如下代码:

ITN120AHKXNMUHKL

但是,我有一个新的要求,即代码格式必须是可自定义的.我想通过允许用户设置自定义格式字符串来公开此功能,例如:

OCP $ {} departmentNumber十一$ {} randomString

PAN - $ {} randomString

哪个会输出:

OCP125XIBQHNKLAPICH

PAN-XJKLBPPJKLXHNJ

然后,哪个Groovy将使用适当的变量值进行解释和替换.这是可能的,还是我必须手动解析占位符并手动执行string.replace?

groovy

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

是否有一个用于C#的ORM工具可以"黑盒子"数据库?

我有一堆我创建的POCO,我想创建一个持久层.事实上,我真的不在乎数据是如何存储在SQL Server中的,我只是希望它存储起来.换句话说,我想告诉ORM工具,"这里有一些POCO类,保存它们." 并且不必做任何事情.是否有任何可以做到这一点的C#ORM工具?我一直在努力让Fluent NHibernate工作,而且Subsonic不支持人际关系,这使得像"为一个帖子获取所有评论"这样的事情非常困难.它需要能够自动生成数据库模式,而不必设置一堆属性和诸如此类的东西.

c# orm poco

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

如何更改枚举的类型?

默认情况下,C#枚举存储为整数.我想把它缩短一下.有没有办法做到这一点?

c# enums

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

在使控制器IoC框架不可知的同时,如何将Ninject与ActionResults一起使用?

我见过的几乎所有Ninject示例都解释了如何在ASP.NET MVC中使用它,它会自动将依赖项注入控制器.我如何手动使用Ninject?假设我有一个自定义ActionResult:

public class JsonResult : ActionResult
{
    [Inject] public ISerializer Serializer { get; set; }

    public JsonResult(object objectToSerialize)
    {
        // do something here
    }

    // more code that uses Serializer
}
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中,我正在使用这样JsonResult的方法:

public ActionResult Get(int id)
{
    var someObject = repo.GetObject(id);
    return new JsonResult(someObject);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我自己实例化了这个对象,它回避了Ninject的注入,并且Serializer将为null.但是,按照以下方式执行此操作对我来说似乎并不合适:

public ActionResult Get(int id)
{
    var someObject = repo.GetObject(id);
    return IoC.Kernel.Get<JsonResult>(someObject);
}
Run Code Online (Sandbox Code Playgroud)

因为现在控制器中不仅存在对Ninject的依赖,而且还必须在静态类/单例中公开Ninject内核,并确保依赖注入的对象仅通过内核创建.

有没有办法以某种方式配置Ninject注入依赖,而不依赖于暴露内核?new如果可能的话,我希望能够使用关键字.

dependency-injection ninject inversion-of-control actionresult asp.net-mvc-2

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

如何使用jQuery Tablesorter对包含两个div的列进行排序?

我正在使用jQuery Tablesorter对表进行排序.我的一个列看起来像这样:

<td>
    <div>
        <span class="green">Yes</span> <a href="##">(unverify)</a>
    </div>
    <div class="hidden">
        <span class="red">No<>/a> <a href="##">(verify)</a>
    </div>
</td>
Run Code Online (Sandbox Code Playgroud)

换句话说,有两个div,一个显示绿色的链接,以及其他显示没有红色的链接.其中一个div总是被隐藏,只要用户点击链接,这两个就会被切换.

jQuery Tablesorter无法对此列进行排序.有没有办法让它这样做,或者我是否必须修改HTML才能使它工作?

html sorting jquery tablesorter

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

如何在Groovy中简化此代码,如果它们为null,则在对象上设置属性?

如果属性不为null,我正在使用Grails在域类上设置属性.目前,代码看起来像这样:

def product = Product.getById(5);

if (!product.Name) {
    product.Name = "Default Product"
}
if (!product.Price) {
    product.Price = 5;
}
if (!product.Type) {
    product.Type = "Shampoo"
}
Run Code Online (Sandbox Code Playgroud)

在Groovy中实现此代码块的更好方法是什么?我设法将其简化为:

product.Name = product.Name ?: "Default Product"
product.Price = product.Price ?: 5
product.Type = product.Type = "Shampoo"
Run Code Online (Sandbox Code Playgroud)

但我希望能够做这样的事情(不是有效的代码):

product {
    Name = product.Name ?: "Default Product",
    Price = product.Price ?: 5,
    Type = product.Type ?: "Shampoo"
}
Run Code Online (Sandbox Code Playgroud)

你们会推荐我做什么?

grails groovy

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

在Grails中,如何判断对象是否是瞬态的?

我在Grails中有一段代码:

def product = Product.get(5) ?: new Product()
product.isDiscounted = product.isDiscounted ?: true
Run Code Online (Sandbox Code Playgroud)

问题是,如果isDiscounted已经为现有产品设置了属性并且它是假的,我最终会将其更改为true.是否可以检查物体是否是瞬态的?

grails groovy

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

如何加快使用BETWEEN条件的SQL查询?

我有一个看起来像这样的表:

ID    StartRange    EndRange
----------------------------
 1        1            3
 2        4            8
 3        9           12
Run Code Online (Sandbox Code Playgroud)

依此类推,因此有超过500万条记录。最后一条记录如下所示:

ID        StartRange    EndRange
---------------------------------
5235976   9894727374   9894727378
Run Code Online (Sandbox Code Playgroud)

换句话说,StartRangeEndRange永远不会为每个记录重叠。

我需要进行查询,以找到与范围匹配的数字的对应ID:

SELECT ID FROM BigTable WHERE '5000000' BETWEEN StartRange AND EndRange;
Run Code Online (Sandbox Code Playgroud)

不幸的是,此查询需要几秒钟才能完成。我需要对其进行优化,以使其花费最少的执行时间。我做了一点研究,看起来添加索引似乎无济于事,因为它仅在数字恰好是StartRangeEndRange值时才适用,但在介于两者之间的情况下才适用。

有没有人有任何我可以用来减少执行时间的提示或技巧?理想情况下,我希望它在1秒以下。

mysql sql optimization

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