小编yu_*_*nae的帖子

路由:如何在url中隐藏动作名称?

在MVC默认路由中

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
Run Code Online (Sandbox Code Playgroud)

无论何时访问索引操作,当访问"索引"操作时,URL都不显示操作名称.

我想在不同的控制器上获取该行为,该控制器检索单个项目的数据.我希望将默认操作命名为"get",对于此操作,我希望url不显示操作名称,只显示控制器和项目ID.

我认为与上面的路线类似,如下所示:

routes.MapRoute(
            "item_details",
            "item/{action}/{id}",
            new { controller = "item", action = "Get" }
            );
Run Code Online (Sandbox Code Playgroud)

会做的伎俩,但它给了我一个像localhost的网址:xxxx/item/Get/152 ...我错过了什么?

c# asp.net-mvc

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

在IE8中垂直对齐日文字符

在我正在制作的网站上,我在IE8中调整日文字符时遇到了一些问题.

我有类似的东西<span>Label</span><span>Some value</span>.当"标签"和"某些值"都是日语或英语时,它们对齐很好,但当它们混合时("标签"总是日语,但"某些值"可能不是),则对齐关闭.如下图所示:

在此输入图像描述

令人惊讶的是,它在其他浏览器中运行良好,例如来自Chrome的相同图像:

Chrome中的示例

我无法弄清楚如何解决这个问题.有没有人遇到过这个问题或知道解决方法呢?我的公司仍然主要使用IE7,所以一些可行的技巧将是最有用的.

编辑1:我忘了添加我正在使用的CSS.对于我有的标签:

display: inline-block;
color: Gray;
vertical-align: text-top;

/*For IE7*/
zoom: 1;
*display: inline;
Run Code Online (Sandbox Code Playgroud)

对于我正在使用类似的值的值:

display: inline-block;
margin: 0x 0px 0px 0px;
padding: 0px 0px 0px 0px;
vertical-align: text-top;

/*For IE7*/
zoom: 1;
*display: inline;
Run Code Online (Sandbox Code Playgroud)

编辑2:我确定这与这个问题有关.我的表格中有输入框,完全对齐,直到输入一些日文字符.对于罗马字符再没有问题.见下文:

在此输入图像描述

再次,在其他浏览器中没有任何问题......

编辑3:

今天再看看这个(我提出这个问题后一年多了......).在IE9中,字符显示就像在Chrome和其他浏览器中一样,基本上罗马语和日语单词都正确排列.我使用IETester检查了它,对于同一页面,日语字体在IE8中比IE9"更高".

在IE8中:

在IE8中

在IE9中:

在IE9中

我当时没有检查这个,因为我没有IE9.字体看起来完全相同,所以它必须是一个IE问题,我猜是没有什么可以做的呢?

html css asianfonts

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

Fortran使用内部goto进行循环

我有一个看起来像这样的Fortran77代码段:

    DO 1301 N=NMLK-2,2,-1                                                     
       Some code...
       IF(NB1(N).EQ.50) GOTO 1300                                                            
       Some code...
       IF(BS(N).EQ.0.0) GOTO 1301                                                
       some code...                                                               
       GOTO 1301                                                                 
  1300 NW(M)=NB1(N)                                                              
       Some code...                                                               
  1301 CONTINUE
Run Code Online (Sandbox Code Playgroud)

当它击中GOTO 1301语句时,这会跳转到循环的下一次迭代还是退出循环?据我所知,return关键字什么都不做,所以我假设这只是退出循环并继续从标签1301执行代码,这是正确的吗?

我正在将其翻译成C#,我想知道这是否相同:

for (N = NMLK; N >= 2; N--)
{
    Some code...
    if (NB1[N] == 50)
        goto l1300;
    Some code...
    if (BS[N] == 0)
        return;
    Some code...
    return;
l1300:
    NW[M] = NB1[N];
    Some code...
}
Run Code Online (Sandbox Code Playgroud)

或者如果我应该"继续"而不是"返回"?

fortran fortran77

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

随着...结束与在VB.NET中使用

我刚刚发现像C#一样,VB.NET也有using关键字.

到现在为止,我认为它没有它(愚蠢的我,我知道......)并做了这样的事情:

With New OleDbConnection(MyConnectionString)
   ' Do stuff
End With
Run Code Online (Sandbox Code Playgroud)

与使用这样的using语句相比,这有什么影响

Using cn as New OleDBConnection(MyConnectionString)
    With cn
        ' Do stuff with cn
    End With
End using
Run Code Online (Sandbox Code Playgroud)

更新:

我应该补充一点,我熟悉using语句的作用,因为它在退出构造时处理了对象.

但是,据我所知,With New ...构造将使对象在对象超出范围时将其标记为垃圾收集.

所以我的问题是,唯一的区别在于using我将立即释放内存,而对于With构造,只要GC感觉它就会被释放吗?或者我错过了更大的东西?

是否有最佳实践意义?我应该去重写所有的代码我用With New MyDisposableObject() ... End WithUsing o as New MyDisposableObject()

vb.net scope idisposable using-statement with-statement

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

相同的(?)C#和VB.NET LINQ查询返回不同的结果

可能真的很容易,但我看不出来......

我在LINQ中复制MS Access查询.我先用C#编写它来测试它,因为我更喜欢C#,然后我把它翻译成VB.Net语法.据我所知,两个查询应该是相同的,但是当C#查询返回正确的结果时,VB.NET会返回零结果.

谁能看出差异可能在哪里?

C#查询:

var table1 = dc.MainTable.Where(o => o.Year == 423).ToList().Select(o => new
{
    Key_ID = o.Key_ID.Value,
    CropID = o.CropID.Value,
    GroupID = o.GroupID.Value,
    Surface1 = o.Surface1.Value,
    Surface2 = o.Surface2.Value
});

var table2 = dc.OtherTable.Where(o => o.Year == 423).ToList().Select(o => new
{
    Key_ID = o.Key_ID.Value,
    CropID = int.Parse(o.SAKU_CD),
    GroupID = int.Parse(o.SAN_DAN_NO),
    Surface1 = Convert.ToDouble(o.KEIHAN_MEN.Value),
    Surface2 = Convert.ToDouble(o.SAKU_MEN.Value)
});

var output = table1.Join(table2, t1 => new 
{ 
    t1.Key_ID, 
    t1.CropID, 
    t1.GroupID, 
    t1.Surface1, 
    t1.Surface2 
}, 
t2 => new 
{ 
    t2.Key_ID, 
    t2.CropID, 
    t2.GroupID, …
Run Code Online (Sandbox Code Playgroud)

.net c# linq vb.net

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

获取特定linq到sql表的名称

我正在使用Linq to SQL来操作和MS Access数据库.

为了加快批量修改,我发现使用datacontext直接执行查询更有效,就像这样context.ExecutCommand("DELETE FROM [MyTable];").为了提高效率,我想将其作为扩展方法,但我不知道如何从上下文中检索表名...

我知道我可以将表名称作为硬编码字符串传递,例如:

public static void DeleteAll(this Table<TEntity> MyTable)
{
    string tableName = // retrieve MyTable's name

    MyTable.Context.ExecuteCommand(string.Format("DELETE FROM [{0}];", tableName));
}
Run Code Online (Sandbox Code Playgroud)

我在获取表名方面有所帮助,但需要一些帮助才能获得工作.到目前为止,我有:

var tableName = dc.MyTables.Context.GetTable(typeof(MyTable)).ElementType.Name;
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚如何检索实体的类型,MyTables以便不必硬编码参数,.GetTable()并使其可用于我传入的任何表.

在C#或VB中的任何答案都可以.谢谢.

编辑

总结我正在寻找的是一种从表本身获取表的实体类型的方法.有点像Context.MyTable.GetEntityType()...如果只是那么容易.

c# vb.net entity-framework linq-to-sql

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

在z#中将zenkaku字符转换为hankaku,反之亦然

正如它在标题行中所说,我想将zenkaku字符转换为hankaku字符和C#中的副vrsa,但无法弄清楚如何做到这一点.所以,说"ラーメン"到"ラーメン",反之亦然.是否有可能在一种方法中编写它,根据输入的格式自动确定转换需要的方式?

c# string format cjk

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

递归解析字符串

我试图从字符串中提取信息 - 特定的fortran格式字符串.字符串的格式如下:

F8.3, I5, 3(5X, 2(A20,F10.3)), 'XXX'
Run Code Online (Sandbox Code Playgroud)

格式化字段由","分隔,括号内的格式化组,括号前面的数字表示格式化模式重复连续的次数.因此,上面的字符串扩展为:

F8.3, I5, 5X, A20,F10.3, A20,F10.3, 5X, A20,F10.3, A20,F10.3, 5X, A20,F10.3, A20,F10.3, 'XXX'
Run Code Online (Sandbox Code Playgroud)

我试图在C#中创建一些扩展符合该模式的字符串.我已经开始使用大量的开关和if语句,但我想知道我是不是以错误的方式去做?

我基本上想知道一些Regex wizzard是否认为正则表达式可以在一个整齐的一举中做到这一点?我对正则表达式一无所知,但如果这可以解决我的问题,我正在考虑花点时间学习如何使用它们......另一方面,如果正则表达式无法解决这个问题,那么我宁愿花我的时间看另一种方法.

c# regex

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

使用vba在Excel中对形状进行分组和命名

在Excel vba中,我使用vba在excel中创建两个形状.一个箭头,我将其命名为"aro"+ i,以及一个文本框,我将其命名为"text"+ i,其中i是表示照片编号的数字.

所以,对于照片3,我会创建箭头"aro3"和文本框"text3".

然后我想对它们进行分组并将该组重命名为"arotext"+ i,在这种情况下为"arotext3".

到目前为止,我一直在进行分组和重命名,如下所示:

targetSheet.shapes.Range(Array(Arrow.Name, textBox.Name)).Select
Selection.group
Selection.Name = "AroTxt" & Number
Run Code Online (Sandbox Code Playgroud)

它在sub中工作得非常好,但是现在我想把它改成一个函数并返回命名组,所以我尝试了这样的东西:

Dim arrowBoxGroup as Object
set arrowBoxGroup = targetSheet.shapes.Range(Array(Arrow.Name, textBox.Name))
arrowBoxGroup.group
arrowBoxGroup.Name = "AroTxt" & Number
Run Code Online (Sandbox Code Playgroud)

当我创建一个与已经创建的名称相同的新组时,我遇到了问题.因此,如果我创建第二个"aro3"和"text3"然后尝试对它们进行分组并将该组重命名为"arotext3",则会出现错误,因为已经存在具有相同名称的组.

我不明白的是,当我使用引用选择的方法执行此操作时,如果需要,我可以重命名具有相同名称的每个组,并且不会出现错误.为什么它在引用Selection对象时有效,但在尝试使用已分配的对象时失败?

更新:

有人问,我到目前为止的代码如下.箭头和文本框是一个箭头和一个文本框,指向用户使用表单任意定义的方向.

然后,它在目标工作表上以正确的角度创建一个箭头,并在箭头的末尾放置一个具有指定数字(也通过表单)的文本框,以便它有效地形成一个标注.我知道有标注,但他们没有做我想要的,所以我不得不自己做.

我必须对文本框和箭头进行分组,因为1)它们属于一起,2)我使用组的名称作为参考来跟踪已​​经放置了哪些标注,3)用户必须将标注放在正确的位置上嵌入在工作表中的地图.

到目前为止,我已经设法通过使返回值为GroupObject使其成为函数.但是这仍然依赖于Sheet.Shapes.range().选择,在我看来这是一个非常糟糕的方法.我正在寻找一种不依赖于选择对象的方法.

我想了解为什么这在使用选择时有效,但在使用强类型变量来保存对象时失败.

    Public Function MakeArrow(ByVal No As Integer, ByVal angle As Double, ByVal size As ArrowSize, ByVal ArrowX As Double, ByVal ArrowY As Double, ByVal TargetInternalAngle As Double, ByRef targetSheet As Worksheet) As GroupObject

    Dim Number As String
    Dim fontSize As Integer …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba shapes

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

使用excel vba将单元格的公式转换为文本

我正在Excel2003中编写一个宏来查找工作簿中包含公式的所有单元格,并在不同工作表的几列中输出它们的地址和公式.

我知道我可以使用单个细胞显示公式

Public Function ShowFormula(cell As Range) As String

    ShowFormula = cell.Formula

End Function
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,但由于我不想手工找到所有的单元格,我写了下面的宏来找到它们对我来说

Sub Macro2()


Dim i As Integer
Dim targetCells As Range
Dim cell As Range
Dim referenceRange As Range
Dim thisSheet As Worksheet

Set referenceRange = ActiveSheet.Range("CA1")

With referenceRange
    For Each thisSheet In ThisWorkbook.Sheets
        If thisSheet.Index >= referenceRange.Parent.Index Then
            Set targetCells = thisSheet.Cells.SpecialCells(xlCellTypeFormulas, 23)
            For Each cell In targetCells
                If cell.HasFormula Then
                    .Offset(i, 0).Value = thisSheet.Name
                    .Offset(i, 1).Value = cell.Address
                    .Offset(i, 2).Value = CStr(cell.Formula)
                    i = …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-2003 excel-vba

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