私の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」の3つの「マジックストリング」が含まれています。Ajax呼び出しは次のようになります。
$('#PersonDetails').load('@Url.Action("GetPersonDetails")', { PersonId: ... });
ここでも、マジックストリング「PersonDetails」が表示されます。
良くない!
これらの魔法の文字列を1つの場所で定義し、1)ビュー、2)できればAjax呼び出しなどを実装する静的JavaScriptファイル、および3)CSSファイルで使用するための「ベストプラクティス」を提案できますか?
おそらく_Layout.cshtmlには、そのコントローラーまたは特定のアクションの魔法の文字列を定義する部分的なビューが含まれている可能性があると思います。それは、どのコントローラーおよび/またはアクションがそれを呼び出したかを調べ、それに基づいて適切な部分ビューを呼び出します。私はすでに.cssとstatic.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ファイルでそれらを使用する方法。
より良い提案はありますか?この問題をどのように処理しますか?