当控制器基于模型呈现视图时,您可以使用索引器从ViewData集合中获取属性(即ViewData ["Property"]).但是,我有一个共享用户控件,我尝试使用以下方法调用:
return View("Message", new { DisplayMessage = "This is a test" });
Run Code Online (Sandbox Code Playgroud)
在我的消息控件上我有这个:
<%= ViewData["DisplayMessage"] %>
Run Code Online (Sandbox Code Playgroud)
我认为这会正确渲染DisplayMessage,但是返回null.经过大量的修补,我终于创建了一个"MessageData"类,以便强烈键入我的用户控件:
public class MessageControl : ViewUserControl<MessageData>
Run Code Online (Sandbox Code Playgroud)
现在这个电话有效:
return View("Message", new MessageData() { DisplayMessage = "This is a test" });
Run Code Online (Sandbox Code Playgroud)
并可以这样显示:
<%= ViewData.Model.DisplayMessage %>
Run Code Online (Sandbox Code Playgroud)
为什么在没有强大地键入用户控件的情况下,不会将DisplayMessage属性添加到ViewData(即ViewData ["DisplayMessage"])集合中?这是设计的吗?ViewData是否包含"DisplayMessage"的键是否有意义?
我一直在我的控制器中嵌入我的viewdata类,随着数字的增长,我开始问自己这是不是一个好主意.然后,关于使用这些东西污染/ Views和/ Controllers目录的东西似乎已经关闭了.
我在这里缺少一个约定吗?也许一个/ ViewData目录?idk,我的viewdata类有哪些好的位置?
我有一个ASP.NET MVC应用程序,有很多下拉列表和多选列表.基本上,很多选项列表.
我的问题是; 将这些列表作为模型的一部分或ViewData传递给视图会更好吗?
我目前正在将它们作为ViewData传递,因为我在模型上并不真正需要它们,并且它们似乎可能在模型上传递时很笨重(我得到所选项目或项目,这实际上是我所需要的).在缺点方面,ViewData需要在View上进行转换,这不如强类型模型好.
这里有最好的做法吗?即使是对这些方面的利弊建议也会受到赞赏.
我什么时候应该使用一个?我想在启动时缓存某个对象并在应用程序周围重用.这听起来像是更好的解决方案(ViewData或Session)?
我在处理控制器的Post请求时遇到问题:
[HttpGet]
public ActionResult Crear()
{
CarreraRepository carreraRepository = new CarreraRepository();
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
var carrerasList = new SelectList(carreras, "ID", "Nombre");
ViewData["Carreras"] = carrerasList;
Materia materia = new Materia();
return View(materia);
}
[HttpPost]
public ActionResult Crear(Materia materia, FormCollection values)
{
if (ModelState.IsValid)
{
repo.Add(materia);
repo.Save();
return RedirectToAction("Index");
}
return View(materia);
}
Run Code Online (Sandbox Code Playgroud)
当HttpGet操作运行时,要创建的表单呈现正常.DropDownList上的值设置正确,一切都很好; 当我尝试提交表单(运行HttpPost操作)时,我收到错误.
谁能帮我吗?
是因为HttpPost没有声明ViewData吗?谢谢您的帮助.
刚刚在今天发布的ASP.NET MVC 3 RC中使用Razor.
现在,我们有一个"布局页面"的概念,我认为它取代了ASPX视图引擎中的"View Master".
但我不明白布局页面的"视图"属性.
以下是创建新Razor View时创建的示例:
_Layout.cshtml
<html>
<head>
<title>@View.Title</title>
Run Code Online (Sandbox Code Playgroud)
...
MyView.cshtml
@model Mvc3FunParty.Models.Post
@{
View.Title = "Some Title";
Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
这导致"Some Title"被插入到<title>呈现的HTML 的标记中.
这究竟是如何工作的?当我将鼠标悬停在"视图"属性上时,它的类型为" 动态 ".
那么这个属性应该用于什么呢?我们可以在那里塞东西吗?这应该是ViewData的Razor实现吗?
如果是这样,它不应该是" ViewDataDictionary " 类型?为什么View属性的" 动态 "类型?
//CHECK IF WE SHOULD SHOW THE PASSWORD HINT OR NOT
Setting passwordhints;
using (var db = new dbDataContext())
{
passwordhints = (from c in db.Settings
where c.Name == "ShowPasswordHints" && c.ID == _ID
select c).FirstOrDefault();
}
if (passwordhints != null)
//NOTE: .Value IS A STRING
ViewData["ShowPasswordHints"] = passwordhints.Value;
else
ViewData["ShowPasswordHints"] = "False";
//END PASSWORD HINTS CHECK
Run Code Online (Sandbox Code Playgroud)
是在控制器中,当我到达页面本身时我输出
<%=ViewData["ShowPasswordHints"]%> 进入标题标签,我可以在那里看到它说"真"(没有引号,我还用括号括起来检查空格,没有空格,它实际上只是真)
但是,当我这样做
<%if(ViewData["ShowPasswordHints"] == "True") {%> SHOW THIS <%}%>
Run Code Online (Sandbox Code Playgroud)
显示这从未出现过,到底是什么?
更新:但是,如果ViewData设置如此......它工作......嗯?
if (accountRepository.isLDAPEnabled(_ID))
ViewData["LDAP"] = "True";
else
ViewData["LDAP"] = "False";
Run Code Online (Sandbox Code Playgroud)
视图... …
我正在通过 MVC3 处理我的第一个应用程序,但它仍然是一个新手:
我正在尝试在母版页上成功我的 ViewData[] 因为它包含将在每个页面上使用的消息,但是当我试图访问它说:
CS0103:当前上下文中不存在名称“ViewData”
var msg = ViewData["msg"] as string;
//var msg = ViewBag.msg as string;
if (msg != null)
{
Response.Write (msg);
} else if (msg == null)
{
Response.Write("");
}
Run Code Online (Sandbox Code Playgroud)
我不确定是我做错了什么,还是无法通过我的 MasterPage 访问 ViewData[]。请帮忙!
如何在Razor @foreach语句内的文本区域中的每个项目之后添加换行符?
下面的代码在一行上显示所有内容,例如...
12341524345634567654354487546765
当我想要...
12341524
34563456
76543544
87546765
<textarea>
@foreach (var item in ViewData.Model)
{
@item["ACCT_ID"]
}
</textarea>
Run Code Online (Sandbox Code Playgroud) 我通过ViewData从控制器发送文件路径(字符串)到html页面,我想在我的javascript中访问该字符串,使用它,在javascript中运行一些算法,然后使用结果来使用它们并在同一个html页面上制作一些图形.
HTML
</head>
<body>
<div id="mychart"></div>
<script>
var path=@ViewData["path"];
//some javascript logic with the string path of the file.
//using results for output chart of id 'mychart'
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
控制器动作代码:
public IActionResult CellResult(string outputpath)
{
ViewData["path"] = outputPath;
return View();
}
Run Code Online (Sandbox Code Playgroud) viewdata ×10
asp.net-mvc ×5
c# ×3
asp.net ×2
razor ×2
.net ×1
conventions ×1
foreach ×1
html ×1
javascript ×1
master-pages ×1
model ×1
multi-select ×1
newline ×1
selectlist ×1
session ×1
textarea ×1
viewbag ×1