向 ReSharper 或 Visual Studio 指示 JSON 变量是模型的实例
Indicate to ReSharper or Visual Studio that JSON variable is instance of Model
我的前端库有时需要来自我的 MVC 应用程序(例如 jQGrid)的 JSON 数据。我在需要时通过将所需模型 classes 转换为 JSON 来适应这一点。但是,我 运行 遇到了一个问题,即重构此类模型有时会变得困难; ReSharper 和 Visual Studio 都无法在模型转换为 JSON 后识别此“模型访问”——仅当它在 C# 模板(老式 WebForms 或 Razor)中使用时。
有什么方法可以提示 VS 或 ReSharper,例如,在 jQGrid 中使用的 JS 变量 rowObject
等同于 C# class [=14= 的用法]?理想情况下,我可以获得智能感知之类的东西,但更重要的是,ReSharper 的 class 的“查找用法”/它的属性可以识别它在这里被使用。 (例如 MyModel.Name
的“查找用法”=> rowObject.Name
的这种用法)
// <Back-End>
public JsonResult JsonList(string userName)
{
var model = new List<MyModel>()
...
return Json(model.OrderByDescending(x => x.WhenSent), JsonRequestBehavior.AllowGet);
}
// <Front-End>
$("#jQGridExample").jqGrid({
url: '<%= Url.Action("JsonList", "MyController") %>',
datatype: "json",
...
formatter: function (cellvalue, options, rowObject) {
// rowObject is of type "MyModel" but neither tool will know this.
// If I remove a property from "MyModel" without updating the JS & rowObject uses it,
// this can become an easily missed front-end regression.
}
不,因为不仅有 layer-wise 中断(前端与后端),而且还有技术中断 - 即 JS 与 C#。只要 compiler/R# 级别上没有 C# 和 JS 之间的直接桥梁,这就仍然不可能。
当然,您可以通过在 JS/TypeScript 中创建模型来缓解这些问题,这些模型与他们的 C# pendants 相似(意味着相同的名称、属性等)- e . G。 here and here。但它们技术上并不相同。
我的前端库有时需要来自我的 MVC 应用程序(例如 jQGrid)的 JSON 数据。我在需要时通过将所需模型 classes 转换为 JSON 来适应这一点。但是,我 运行 遇到了一个问题,即重构此类模型有时会变得困难; ReSharper 和 Visual Studio 都无法在模型转换为 JSON 后识别此“模型访问”——仅当它在 C# 模板(老式 WebForms 或 Razor)中使用时。
有什么方法可以提示 VS 或 ReSharper,例如,在 jQGrid 中使用的 JS 变量 rowObject
等同于 C# class [=14= 的用法]?理想情况下,我可以获得智能感知之类的东西,但更重要的是,ReSharper 的 class 的“查找用法”/它的属性可以识别它在这里被使用。 (例如 MyModel.Name
的“查找用法”=> rowObject.Name
的这种用法)
// <Back-End>
public JsonResult JsonList(string userName)
{
var model = new List<MyModel>()
...
return Json(model.OrderByDescending(x => x.WhenSent), JsonRequestBehavior.AllowGet);
}
// <Front-End>
$("#jQGridExample").jqGrid({
url: '<%= Url.Action("JsonList", "MyController") %>',
datatype: "json",
...
formatter: function (cellvalue, options, rowObject) {
// rowObject is of type "MyModel" but neither tool will know this.
// If I remove a property from "MyModel" without updating the JS & rowObject uses it,
// this can become an easily missed front-end regression.
}
不,因为不仅有 layer-wise 中断(前端与后端),而且还有技术中断 - 即 JS 与 C#。只要 compiler/R# 级别上没有 C# 和 JS 之间的直接桥梁,这就仍然不可能。
当然,您可以通过在 JS/TypeScript 中创建模型来缓解这些问题,这些模型与他们的 C# pendants 相似(意味着相同的名称、属性等)- e . G。 here and here。但它们技术上并不相同。