Razor语法不正确

时间:2013-04-25 17:22:42

标签: asp.net-mvc razor

我在理解@Razor在视图中的工作方式时遇到了一些麻烦。下面的代码是我的视图,用户可以在其中创建新帖子(我正在创建论坛)

我想要删除<Fieldset> 我的问题是我无法更改我标记的代码。

@model Forum3.Models.Posts

<h2>CreatePost</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
//--- CAN'T EDITED ----
    <fieldset>
        <legend>Post</legend>
        @*SET TopicID*@
        @{
Html.HiddenFor(model => model.TopicId);
@Html.Hidden("TopicId",ViewData["currentTopicId"]);
           }
//----END----

        <div class="editor-label">
            @Html.LabelFor(model => model.Text)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Text)
            @Html.ValidationMessageFor(model => model.Text)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

如果我删除了<Fieldset&gt;和<Legend&gt;我的HiddenFor代码出现此错误: Parser Error Message: Unexpected "{" after "@" character. Once inside the body of a code block (@if {}, @{}, etc.) you do not need to use "@{" to switch to code.

如果我然后移除@{...}看起来像这样:

@Html.HiddenFor(model => model.TopicId);
@Html.Hidden("TopicId",ViewData["currentTopicId"]);

当我点击Create时我会收到错误,因为TopicId未设置为currentTopicId(如果我将<fieldset>留在其中,也会发生这种情况)

我不知道这里发生了什么。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

删除周围的块并在两个字段上使用@后,我没有任何错误。但是,有一件事你可能会弄乱你的帖子 - 你有同一属性的HiddenHiddenFor。因此,如果你看一下渲染的标记,你会在那里看到它两次,所以它会被发布两次(我不确定它分配给发布的模型)。

HiddenFor就是您所需要的 - 只需确保您的模型包含TopicId值,而您根本不需要它ViewData,这样您就可以摆脱第二个。