C# 为每个(部分)视图生成唯一ID

C# 为每个(部分)视图生成唯一ID,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我正在开发一个MVC应用程序,我的客户希望在每个屏幕上都有一个唯一的ID。他将使用此ID作为他正在编写的手册中的参考。 我正在寻找一种通用方法,我不想在每个单独的视图/部分上硬编码ID 为了使其更复杂,部分视图是使用jqueryajax调用加载的,这些部分还应该具有唯一的ID(因此在这种情况下,应该显示部分视图的ID,而不是包含页面的ID) 有人能给我一个通用的策略来归档吗? 不必担心ID的格式,它可以是任何内容(例如GUID的一部分) 谢谢 您可以散列部分视图名称。这将为每个视图提供一个一致(

我正在开发一个MVC应用程序,我的客户希望在每个屏幕上都有一个唯一的ID。他将使用此ID作为他正在编写的手册中的参考。 我正在寻找一种通用方法,我不想在每个单独的视图/部分上硬编码ID

为了使其更复杂,部分视图是使用jqueryajax调用加载的,这些部分还应该具有唯一的ID(因此在这种情况下,应该显示部分视图的ID,而不是包含页面的ID)

有人能给我一个通用的策略来归档吗? 不必担心ID的格式,它可以是任何内容(例如GUID的一部分)


谢谢

您可以散列部分视图名称。这将为每个视图提供一个一致(且唯一)的名称。如果将视图放入标记中,则每次呈现视图时都会计算该值

比如:

@(((RazorView)ViewContext.View).ViewPath.GetHashCode())
应该根据视图的名称生成一个数字。有点脏,有点黑,但我想这会符合你的目的

抱歉。在测试中,上述内容似乎只适用于父视图。我会把它写在评论里,但我还没有足够的声誉。不过,这可能会让你走上正轨

尽管如此,您可以根据文件名使用以下命令执行与上述类似的操作:

@Path.GetFileNameWithoutExtension(Server.MapPath(VirtualPath)).GetHashCode()

在我的测试中,它确实适用于ajax的部分视图

您可以散列部分视图名称。这将为每个视图提供一个一致(且唯一)的名称。如果将视图放入标记中,则每次呈现视图时都会计算该值

比如:

@(((RazorView)ViewContext.View).ViewPath.GetHashCode())
应该根据视图的名称生成一个数字。有点脏,有点黑,但我想这会符合你的目的

抱歉。在测试中,上述内容似乎只适用于父视图。我会把它写在评论里,但我还没有足够的声誉。不过,这可能会让你走上正轨

尽管如此,您可以根据文件名使用以下命令执行与上述类似的操作:

@Path.GetFileNameWithoutExtension(Server.MapPath(VirtualPath)).GetHashCode()


在我的测试中,哪一项适用于ajax的局部视图

每个屏幕上的唯一ID?你不能对每个视图使用相同的ID吗?因为您一次不会看到多个视图。难道你不能在服务器端的会话中保留一个视图ID字典,然后检查现有的唯一ID并提供一个新的吗?你能举一个例子,说明你所说的每个局部视图应该有一个唯一的ID,而不应该显示包含该ID的页面吗?我在这里有点困惑。您是否需要以任何方式将这些ID与客户端关联?如果它们只是随机生成的,实际用途是什么?在我看来,任何时候客户端出现在屏幕上,该客户端都需要看到相同的ID,并且该客户端的视图需要一致,对吗?请指定MVC应用程序的主要用途。。可能您可以为每个视图获取一个完整的路由路径,该路径应该是唯一的,然后将其分解为字符,然后再分解为等效的数字。您将如何将唯一值与文档绑定?如果动态生成,文档中将显示什么?在我看来,您需要一个简单的名称/值对列表,可以将其放入文档和源代码管理中。如果在容器视图中提供多个部分视图,会发生什么情况?哪个局部视图id应该是显示的id?每个屏幕上的唯一id?你不能对每个视图使用相同的ID吗?因为您一次不会看到多个视图。难道你不能在服务器端的会话中保留一个视图ID字典,然后检查现有的唯一ID并提供一个新的吗?你能举一个例子,说明你所说的每个局部视图应该有一个唯一的ID,而不应该显示包含该ID的页面吗?我在这里有点困惑。您是否需要以任何方式将这些ID与客户端关联?如果它们只是随机生成的,实际用途是什么?在我看来,任何时候客户端出现在屏幕上,该客户端都需要看到相同的ID,并且该客户端的视图需要一致,对吗?请指定MVC应用程序的主要用途。。可能您可以为每个视图获取一个完整的路由路径,该路径应该是唯一的,然后将其分解为字符,然后再分解为等效的数字。您将如何将唯一值与文档绑定?如果动态生成,文档中将显示什么?在我看来,您需要一个简单的名称/值对列表,可以将其放入文档和源代码管理中。如果在容器视图中提供多个部分视图,会发生什么情况?哪个部分视图id应该是显示的?这对返回部分视图的
ajax调用不起作用。
正如OP所说的,包含视图的唯一id应该被部分视图替换。Ryan完全正确。我没有对它进行测试就写了这篇文章,但一旦我将它插入沙箱站点,它就不太管用了。@Echo这是个聪明的主意。谢谢:)编辑后包含了一篇可能适用于@Jo的文章。这可能更骇人听闻…@Echo整个问题似乎有点骇人听闻,所以走开吧,好先生p这不适用于返回部分视图的
ajax调用
。正如OP所述,包含视图的唯一id应替换为部分视图。Ryan说得很对。我没有对它进行测试就写了这篇文章,但一旦我将它插入沙箱站点,它就不太管用了。@Echo这是个聪明的主意。谢谢:)编辑后包含了一篇可能适用于@Jo的文章。这可能更骇人听闻…@Echo整个问题似乎有点骇人听闻,所以走开吧,好先生P