当Jeremy&Chad 发布他们的FubuMvc项目时,他们提到的一个区别是他们的"Thunderdome Principal":
"Thunderdome Principle" - 所有Controller方法都接受一个ViewModel对象(在某些情况下为零对象)并返回一个ViewModel对象(一个对象进入,一个对象离开).Controller类永远不会直接暴露给与HttpContext相关的任何东西.没有什么能让我哭泣,就像看到人们试图编写模拟或存根新IHttpContextWrapper接口的测试一样.同样,Controller方法不返回ViewResult对象,并且通常与所有MVC基础结构分离.我们很早就采用了这种策略,以便使控制器测试更加简单.它绝对实现了这一目标,但它也使得Controller代码非常简化并且易于阅读.我们将在KaizenConf解释它是如何工作的.
他们的'一个ViewModel(或零)'方法有什么优势?
model-view-controller asp.net-mvc viewdata controller fubumvc
我想知道,在MVC 4中创建下拉列表的最佳方法是什么?使用ViewBag或其他方法?
viewdata html-select html.dropdownlistfor viewbag asp.net-mvc-4
我试图通过随机string
从我Controller
的View
.
这是我的Controller
代码:
[HttpPost]
public ActionResult DisplayForm(UserView user)
{
//some data processing over here
ViewData["choice"] = "Apple";
return RedirectToAction("Next", "Account");
}
Run Code Online (Sandbox Code Playgroud)
现在我想将该数据值"Apple"传递给我的视图Next.cshtml
,该视图创建如下:
//View: Next.cshtml
@{
ViewBag.Title = "Thanks for registering";
Layout = "~/Content/orangeflower/_layout.cshtml";
}
<p>Your favorite fruit is:</p>@ViewData["choice"]
Run Code Online (Sandbox Code Playgroud)
但是当项目运行时,我无法在浏览器中看到我的数据.
这是快照:
1)在调试时,控制器显示值:
2)浏览器视图未显示值"Apple"
3)进一步调试我的Next.cshtml
视图:
为什么值没有正确传递给View.我Next
和我的控制器DisplayForm
都在同一个控制器内AccountController.cs
,仍然没有显示值.
有人可以帮我解决这个问题吗?
在视图中强类型视图 @model System.Tuple<Person, List<Survey>>
我在for-each循环中使用:
@Html.EditorFor(x => survey.Questions)
Run Code Online (Sandbox Code Playgroud)
在"调查"中提出问题.它完美无瑕.
现在我还想将其他数据传递给自定义编辑器模板.我做了:
@Html.EditorFor(x => survey.Questions, new { htmlAttributes = new { PersonId = 1000 } })
Run Code Online (Sandbox Code Playgroud)
然后在Edtior模板中我想引用它PersonId
并显示它.
这是我制作的编辑模板(问题用途的快捷方式):
@using WebApplication2.Models
@model Question
<div>
@ViewData["PersonId"]
</div>
Run Code Online (Sandbox Code Playgroud)
但没有任何表现.
如何正确传递PersonId = 1000
给此EditorTemplate.
我有两个ViewComponent,我希望使用ViewData或其他技术来共享一些数据,然后在主视图中使用这些数据,但这不是方法,并且当ViewComponent的富到if条件时,每个ViewComponent的ViewData为null.
public class OneViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(Page page, Zone zone)
{
//some operation
string text = "one";
if(ViewData["data"] != null)
{
ViewData["data"] = ViewData["data"].ToString() + text;
}
else
{
ViewData["data"] = text;
}
return View();
}
}
public class TwoViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(Page page, Zone zone)
{
//some operation
string text = "two";
if(ViewData["data"] != null)
{
ViewData["data"] = ViewData["data"].ToString() + text;
}
else
{
ViewData["data"] = text;
}
return View();
} …
Run Code Online (Sandbox Code Playgroud) 我已经看到很多关于此的问题,但我从来没有真正得到我需要的答案.
我正在将一个相当大的Web应用程序从Web Forms转换为MVC,过了一段时间我就把数据传递给视图了.在Action中我执行代码:
//This is just an example
ViewData["QProducts"] = from p in db.Products select new{Name = p.Name, Date = p.ToShortDateString() }
ViewData["QUsers"] = from u in db.Users select u;
我使用foreach循环迭代html中的对象,如下所示:
foreach(var q in (IEnumerable)ViewData["QEvents"])
{
/*Print the data here*/
}
Run Code Online (Sandbox Code Playgroud)
在使用MVC之前我只使用了一个asp:Repeater
,但由于这是MVC我不能使用ASP.NET控件.
我该如何将这些数据传递给View?我真的没有选择不在这里使用匿名类型.<%#ViewData.Eval()%>
显然不行.
有任何想法吗?
我正在尝试将ViewData传递到我的asp.net mvc主页,以获取我保留在母版页上的mvc usercontrol.例如,我创建了一个名称下拉列表作为mvc usercontrol,我把它放在我的母版页中.
我遇到的问题是将ViewData传递给母版页.我发现微软的这篇文章有一个不错的解决方案,但我想知道是否还有其他"更好"的解决方案.我不喜欢链接中的解决方案是我必须更改每个控制器以继承新的控制器类.
http://www.asp.net/learn/MVC/tutorial-13-cs.aspx
编辑:我正在看的问题是,如果我将用户控件放在依赖于ViewData的母版页中,我必须为使用所述母版页的每个页面重复包含该ViewData.上述链接中的解决方案可能是最佳解决方案,但我希望还有其他替代方案.
当用户登录我的应用程序时,我想在整个应用程序中显示他的名字.我正在使用asp.net MVC框架.但我不想要的是必须在每个控制器中添加如下内容:
ViewData["User"] = Session["User"];
Run Code Online (Sandbox Code Playgroud)
这是因为你可能不会重复自己.(我相信这是OO编程的DRY [不要重复自己]原则.)ViewData ["User"]在我的主页上.所以我的问题是,在一个地方处理我的ViewData ["用户"]的简洁方法是什么?
我已经对这个问题感到头疼了几天,我不确定这是否是我的环境或代码本身的问题,这是基于ASP.NET MVC(尽管我有5年的C#经验).我正在使用最新的Win7x64和VS 2008的干净安装以及所有补丁.
我有一个存储在数据库表中的原始HTML,它由控制器根据我无法控制的一些规则有选择地加载.不幸的是,当尝试将值填充到控件中的视图数据时,如下所示:
ViewData["HTMLData"] = DAO.HTMLDataGet();
Run Code Online (Sandbox Code Playgroud)
当我看到输出时,它被转义/ HTML编码.我尝试使用以下所有这些似乎无法解决此问题:
<%: HttpUtility.HtmlDecode(ViewData["HTMLData"].ToString())%>
Run Code Online (Sandbox Code Playgroud)
和...
<%: Server.HtmlDecode(ViewData["HTMLData"].ToString())%>
Run Code Online (Sandbox Code Playgroud)
和...
<%: Html.Raw(ViewData["HTMLData"].ToString())%>
Run Code Online (Sandbox Code Playgroud)
...它从数据库表中抓取原始HTML就好了,但无论我尝试什么,它都会强制执行blasted编码.根据我在MSDN上阅读的内容,有一个关于HTML没有被正确解码的问题的脚注,其中包含空格(我的确如此).既然我怀疑我是唯一一个面对这个问题的人,我会向你们寻求一些想法.
我即将以我的方式克服我的方式,在视图中使用正则表达式来进行页面清理,但是我认为在我强行推断之前先从其他人那里得到一些建议会更好.谢谢你提前.
我想传递一个对象Model.AvailableVerticalType
非常久远了
expression
,并template name
在调用HTML辅助DisplayFor
.在不传递对象的情况下,DisplayFor语法如下所示:
@Html.DisplayFor(o => offer, MVC.Shared.Views.DisplayTemplates.OfferDetail)
Run Code Online (Sandbox Code Playgroud)
该OfferDetail
模板接受一个类型的对象offer
而已.
@model DGS.DGSAPI.UI.BusinessModels.Offer
Run Code Online (Sandbox Code Playgroud)
所以我需要一种通过ViewData发送它的方法.可能吗?在DisplayFor中传递Viewdata的语法是什么?
viewdata ×10
asp.net-mvc ×7
c# ×4
.net ×1
asp.net-core ×1
controller ×1
decode ×1
fubumvc ×1
html ×1
html-select ×1
linq ×1
master-pages ×1
razor ×1
viewbag ×1