Asp.net mvc 4 预加载并禁用EditorFor

Asp.net mvc 4 预加载并禁用EditorFor,asp.net-mvc-4,html-helper,editorfor,Asp.net Mvc 4,Html Helper,Editorfor,我正在练习MVC4。我的实践项目是一种简单的评论板/论坛,允许注册用户和匿名用户发表评论 目前,我已经设置了我的代码,这样即使是注册用户也可以在提交小名+消息表单时输入他们想要的任何名称。我希望对注册用户禁用此行为,而不是使用从其登录信息中获取的用户名 理想情况下,注册用户的名称框中已加载用户名,并且不可编辑。当表单通过验证时,将使用此用户名,以确保名称和消息均为空 以下是我在视图中的代码: <div class="editor-label"> @Html.Label

我正在练习MVC4。我的实践项目是一种简单的评论板/论坛,允许注册用户和匿名用户发表评论

目前,我已经设置了我的代码,这样即使是注册用户也可以在提交小名+消息表单时输入他们想要的任何名称。我希望对注册用户禁用此行为,而不是使用从其登录信息中获取的用户名

理想情况下,注册用户的名称框中已加载用户名,并且不可编辑。当表单通过验证时,将使用此用户名,以确保名称和消息均为空

以下是我在视图中的代码:

<div class="editor-label">
        @Html.LabelFor(x => x.comment.Name)
    </div>
    <div class="editor-field">
        @Html.ValidationMessageFor(x => x.comment.Name)
        <br />
        @if (User.Identity.Name=="") {
            @Html.EditorFor(x => x.comment.Name)
        } else {
            @Html.EditorFor(x => x.comment.Name, Model.PosterName)
        }
    </div>

@LabelFor(x=>x.comment.Name)
@Html.ValidationMessageFor(x=>x.comment.Name)

@if(User.Identity.Name==“”){ @EditorFor(x=>x.comment.Name) }否则{ @EditorFor(x=>x.comment.Name,Model.PosterName) }
注意Model.PosterName只是将用户的用户名作为字符串保存。它不是null或空的

如何编辑第二个EditorFor行,以便使用Model.PosterName作为默认选项?我是否应该使用DisplayFor来代替不可编辑的行为

我上面写的代码并没有用任何值填充EditorFor


谢谢

为新注释传递到视图中的模型应将
comment.Name
设置为所需的值。您可以在控制器中执行此操作。如果你可以发布你的控制器代码,我将能够给你确切的代码,你需要添加

如果要在视图中禁用此输入字段,请执行以下操作:

@Html.TextBoxFor(x => x.comment.Name, new { @disabled = "disabled" } )

如果知道它是一个文本框,则无需使用
EditorFor
。使用
TextBoxFor
可以指定上述html属性。

感谢您的回复。我确实按照您的建议将用户名输入到控制器中的注释模型中,效果很好。我想指出的一点是,视图的代码行导致验证将字段视为空,尽管文本已锁定。但是使用:new{@readonly=“readonly”}就可以了,尽管我更喜欢您的代码禁用光标图标。