Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-System.Web.HttpParseException在@if中包含未关闭的HTML元素时出错_C#_.net_Parsing_Razor_Runtime Error - Fatal编程技术网

C#-System.Web.HttpParseException在@if中包含未关闭的HTML元素时出错

C#-System.Web.HttpParseException在@if中包含未关闭的HTML元素时出错,c#,.net,parsing,razor,runtime-error,C#,.net,Parsing,Razor,Runtime Error,我有一个简单的HTML,它根据主题的不同而变化。IsScheduled的值(bool): 如果为假: 如果为真: razor/cshtml: <div class="row-fluid"> <div class="span6"> something1 </div> @if (topic.IsScheduled){ <div class="span6">

我有一个简单的HTML,它根据
主题的不同而变化。IsScheduled
的值(bool):

如果为假: 如果为真: razor/cshtml:

<div class="row-fluid">
        <div class="span6">
            something1
        </div>
    @if (topic.IsScheduled){
        <div class="span6">
            something3
        </div>
    </div>
    <div class="row-fluid">
    }
        <div class="span6">
            something2
        </div>
    @if (topic.IsScheduled) {
        <div class="span6">
            something4
        </div>
    }
</div>
我已经测试过了,C#给了我错误,因为
div
s在
@if
语句中没有关闭,而不是因为缺少开始/结束括号。如果我在If中关闭它们,或者简单地用
@**
注释整个If,那么它就工作了

我如何配置忽略
HttpParse
,甚至关闭它以停止解析我的HTML?
是的,我可以使用if/else,但是我会复制HTML和变量,因为解析器很笨,这是我想要避免的。

您的代码看起来不错,但是Razor布局引擎还没有完全解决所有的问题,而且您确实对布局/业务逻辑有点幻想。也就是说,你试过接吻法吗?因此:

@if (topic.IsScheduled){
    <div class="row-fluid">
        <div class="span6">something1</div>
        <div class="span6">something3</div>
    </div>
    <div class="row-fluid">
            <div class="span6">something2</div>
            <div class="span6">something4</div>
    </div>
} else {
    <div class="row-fluid">
        <div class="span6">something1</div>
        <div class="span6">something2</div>
    </div>
}
@if(topic.IsScheduled){
有些事
有些事
什么
有些事
}否则{
有些事
什么
}

我在Razor上遇到过各种各样的奇怪情况,比如在运行时出现异常的空白(或缺少空白)。

通常,HTML元素和Razor代码块必须正确嵌套,因此当解析器到达
@if
中的第二个
时,它认为您忘记了关闭

要修复此错误,只需在“额外”HTML标记前面加上
@:
,如下所示:

<div class="row-fluid">
    <div class="span6">
        something1
    </div>
@if (topic.IsScheduled) {
    <div class="span6">
        something3
    </div>
@:</div>
@:<div class="row-fluid">
}
    <div class="span6">
        something2
    </div>
@if (topic.IsScheduled) {
    <div class="span6">
        something4
    </div>
}
</div>

有些事
@如果(主题已安排){
有些事
@:
@:
}
什么
@如果(主题已安排){
有些事
}

@:
序列告诉解析器,行的其余部分是您希望作为包含代码块的一部分包含的内容。

效果很好
@:
的行为类似于PHP的
echo
,但不必用引号括起来,对吗?谢谢@拉斐尔德:恐怕我不熟悉PHP。也许其他人可以评论。
System.Web.HttpParseException (0x80004005): The if block is missing a closing "}" character. Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup. at 
@if (topic.IsScheduled){
    <div class="row-fluid">
        <div class="span6">something1</div>
        <div class="span6">something3</div>
    </div>
    <div class="row-fluid">
            <div class="span6">something2</div>
            <div class="span6">something4</div>
    </div>
} else {
    <div class="row-fluid">
        <div class="span6">something1</div>
        <div class="span6">something2</div>
    </div>
}
<div class="row-fluid">
    <div class="span6">
        something1
    </div>
@if (topic.IsScheduled) {
    <div class="span6">
        something3
    </div>
@:</div>
@:<div class="row-fluid">
}
    <div class="span6">
        something2
    </div>
@if (topic.IsScheduled) {
    <div class="span6">
        something4
    </div>
}
</div>