求助:在.cshtml表单中显示@ViewBag.Name仅展示原始数据
解决.cshtml中@ViewBag.Name显示原始文本的问题
嘿,我之前也碰到过一模一样的情况!这基本都是Razor语法没被服务器正确解析导致的,咱们一步步排查解决:
先确认文件扩展名是标准的.cshtml:如果你的文件后缀是.html,或者不小心变成了.cshtml.txt这类,ASP.NET会把它当成纯静态文件处理,根本不会解析里面的@表达式,自然就原样输出@ViewBag.Name了。赶紧右键检查文件名,改成正常的xxx.cshtml就行。
检查视图里的写法是否正确:
- 别把@ViewBag.Name包在@Html.Raw()里,比如
@Html.Raw("@ViewBag.Name")会强制输出原始文本,直接写@ViewBag.Name就好。 - 如果是在表单字段的value属性里,确保写法是
<input type="text" value="@ViewBag.Name" />,别加多余的引号或者转义符。
- 别把@ViewBag.Name包在@Html.Raw()里,比如
确认控制器里给ViewBag.Name赋过值:虽然这个不会导致显示原始文本,但没赋值的话会显示空值,还是提一句——在对应的Action方法里要写类似这样的代码:
public ActionResult YourAction() { ViewBag.Name = "要显示的具体内容"; return View(); }
- 核对项目类型是否匹配:如果是在ASP.NET Web Forms项目里误用了Razor的@语法,那肯定不行,Web Forms用的是
<%= ViewBag.Name %>这种语法。如果是MVC/Razor Pages项目,一般新建项目会自动配置好Razor环境,除非你手动改过Web.config里的相关配置。
给你一个正确的示例参考:
控制器代码:
public ActionResult Profile() { ViewBag.Name = "Ceci"; return View(); }
对应的Profile.cshtml表单部分:
<form method="post"> <label>姓名:</label> <input type="text" name="username" value="@ViewBag.Name" /> <button type="submit">提交</button> </form>
这样运行起来,输入框里就会显示“Ceci”而不是@ViewBag.Name啦!
内容的提问来源于stack exchange,提问作者ceci
相关产品推荐
相关产品推荐

