在我的 MVC 视图中,我经常需要从 JavaScript 中引用各种元素,为此我为这些元素定义了 id 属性。这通常与更新各种容器元素内容的 Ajax 调用结合使用。
一个简短的例子(剃刀):
<table id="PersonList">
...
</table>
<div id="PersonDetails">
<!-- This would be loaded dynamically using Ajax -->
<input type="hidden" name="CurrentPersonId" value="@Model.PersonId">
...
</div>
这包含三个“魔术字符串”:“PersonList”、“PersonDetails”和“CurrentPersonId”。Ajax 调用可能如下所示:
$('#PersonDetails').load('@Url.Action("GetPersonDetails")', { PersonId: ... });
再次出现魔术字符串“PersonDetails”。
不好!
任何人都可以提出一些“最佳实践”来在一个地方定义这些魔法字符串并将它们用于 1)视图,2)最好是实现 Ajax 调用等的静态 JavaScript 文件,以及 3)CSS 文件?
我在想,也许 _Layout.cshtml 可以包含一个局部视图,该视图定义了该控制器甚至特定操作的魔术字符串。它将检查调用它的控制器和/或操作,并基于此调用适当的局部视图。我已经为 .css 和静态 .js 做了类似的事情,让我简单地添加 Person.css 并自动将其包含在 Person 控制器的所有视图中。
部分视图会做这样的事情:
@{
const string PersonListId = "PersonList";
const string PersonDetailsId = "PersonDetails";
const string CurrentPersonIdName = "CurrentPersonId";
}
<script type="text/javascript">
NamesAndIds = {};
NamesAndIds.PersonListId = '@Html.Raw(PersonListId)';
NamesAndIds.PersonDetailsId = '@Html.Raw(PersonDetailsId)';
NamesAndIds.CurrentPersonIdName = '@Html.Raw(CurrentPersonIdName)';
</script>
这应该让 Razor 代码使用 C# 字符串 consts 生成适当的 HTML,并且静态 JavaScript 文件可以引用 jQuery 选择器等中的 NamesAndIds。(假设在局部视图中定义的 consts 将在调用视图中可用,我对此表示怀疑(避风港'还没有检查过)......我不知道如何在.css文件中使用它们。
有更好的建议吗?你如何处理这个问题?