我想使用MVC的DisplayTemplates格式化作为JSON ajax响应的一部分包含的HTML。
HTML作为在控制器外部创建的bool checknxn(char grid[10][10]) {
int columns = 0;
for(int i=0;i<10;i++) {
if(grid[0][i]!=NULL)
columns++;
else {
break;
}
}
for(int i=1;i<10;i++) {
for(int j=columns;j<10;j++) {
if(grid[i][j]!=NULL)
return false;
}
}
int rows = 0;
for(int i=0;i<10;i++) {
if(grid[i][0]!=NULL)
rows++;
else {
break;
}
}
if (!(rows == columns))
return false;
for(int i=0;i<rows;i++) {
for(int j=0;j<columns;j++) {
if(grid[i][j]==NULL) {
return false;
}
}
}
return true;
}
类(我的)的一部分返回,因此我不想使用简单的,基于控制器的RenderViewToString()方法,我宁愿选择。
我找到了4种可能的方法来做到这一点,但没有一个让我高兴。我不知道哪个是最好用的,如果有的话。对我来说,他们看起来过于复杂(1,4),过于臭(2)或者头顶沉重(3)。
有人可以建议哪些可能是最有效/最好用的吗?我没有经验来衡量每个人的利弊。
1。 RazorEngine
我曾计划使用RazorEngine - 当我研究它时,it seemed simple enough:
FILE *file1 = fopen(argv[1], "r"); // "r" for read
char grid[10][10];
char c;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
fscanf(file1,"%c", &c);
if (c == '\n') {
grid[i][j] = '\0';
break;
}
if (c == ' ') {
grid[i][j] = '\0';
continue;
}
if (c == '\0') {
grid[i][j] = '\0';
continue;
}
else {
grid[i][j] = c;
}
}
}
但这种方法已经过时了。当我看到the docs时,似乎有很多'突破性变化'。我正在努力解决我应该如何实现,如何缓存,何时从磁盘读取等等。
2。使用RenderViewToString() - 将控制器作为参数传递
我真的不想这样做,因为它看起来很麻烦,将链条进一步传递到其他代码中。
第3。创建一个假控制器
一个选项是创建一个FakeController(this question的接受答案),但这似乎有点矫枉过正。我不记得我在哪里看到它,但我在某处读到它对性能不是很好。
4。使用虚拟路径提供程序渲染类
BuildStarted上的This is another approach I saw。同样,我在这里不够深入,所以不能说这种方法的优点和缺点是什么。
答案 0 :(得分:0)
嗯,无论你做什么,一般原则都是尽量减少你的代码。剃刀做的确切。它的设计目的是与MVC一起使用,如果你强力键入它,它将为你提供更少量的代码,当然还有更少的渲染量。我建议使用剃刀方法。
第一个是我最好的选择。其余的看起来有点矫枉过正。这是个人意见,我认为这里没有绝对的最佳做法。