0

我在理解@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> 和<Legend> 我的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>

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

4

1 回答 1

1

@一旦您删除周围的块并在两个字段上使用,我就没有任何错误。但是,您确实拥有的一件事可能会弄乱您的帖子-您对同一属性同时拥有 aHidden和 a HiddenFor。因此,如果您查看渲染的标记,您会在那里看到两次,因此它被发布了两次(我不确定它分配给发布的模型的是哪一个)。

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

于 2013-04-25T17:39:23.463 回答