我在理解@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>
留在其中,也会发生这种情况)
我不知道这里发生了什么。有什么想法吗?
答案 0 :(得分:1)
删除周围的块并在两个字段上使用@
后,我没有任何错误。但是,有一件事你可能会弄乱你的帖子 - 你有同一属性的Hidden
和HiddenFor
。因此,如果你看一下渲染的标记,你会在那里看到它两次,所以它会被发布两次(我不确定它分配给发布的模型)。
HiddenFor
就是您所需要的 - 只需确保您的模型包含TopicId
值,而您根本不需要它ViewData
,这样您就可以摆脱第二个。