所以,标题应该不言自明。

在ASP中创建可重用的组件。NET MVC,我们有3个选项(可能是其他我没有提到的):

局部视图:

@Html.Partial(Model.Foo, "SomePartial")

定制编辑器模板:

@Html.EditorFor(model => model.Foo)

自定义显示模板:

@Html.DisplayFor(model => model.Foo)

就实际的View/HTML而言,所有三种实现都是相同的:

@model WebApplications.Models.FooObject

<!-- Bunch of HTML -->

所以,我的问题是——何时/如何决定使用三种方法中的哪一种?

我真正想要的是在创建一个之前问自己的问题列表,答案可以用来决定使用哪个模板。

以下是我发现EditorFor/DisplayFor更好的2件事:

They respect model hierarchies when rendering HTML helpers (e.g if you have a "Bar" object on your "Foo" model, the HTML elements for "Bar" will be rendered with "Foo.Bar.ElementName", whilst a partial will have "ElementName"). More robust, e.g if you had a List<T> of something in your ViewModel, you could use @Html.DisplayFor(model => model.CollectionOfFoo), and MVC is smart enough to see it's a collection and render out the single display for each item (as opposed to a Partial, which would require an explicit for loop).

我也听说过DisplayFor呈现一个“只读”模板,但我不明白-我不能扔一个表单在那里吗?

有人能告诉我其他原因吗?有没有比较这三个的列表/文章?

我想有2个单独的布局在我的应用程序。让我们说一个是为网站的公共部分,另一个是为会员方。

为了简单起见,我们假设每个站点的所有逻辑都被整齐地包装在两个不同的控制器中。

PublicController StaffController

它们每个都有一个对应的视图布局。

_PublicLayout.cshtml _StaffLayout.cshtml

我如何使用_ViewStart。cshtml文件指定“公共”下的所有视图/操作使用的PublicLayout和“人员”下的一切使用的StaffLayout?

我一直在SO &谷歌上搜索ASP可用的各种视图引擎的分类。NET MVC,但没有发现更多的简单的高级描述什么是视图引擎。

我并不一定是在寻找“最好”或“最快”,而是在各种情况下对主要玩家(例如默认的WebFormViewEngine, MvcContrib视图引擎等)的优点/缺点进行一些真实世界的比较。我认为这将有助于确定从默认引擎切换是否对给定的项目或开发组有利。

有人遇到过这样的比较吗?

HTML和HTML有什么区别吗?ActionLink vs Url。行动还是它们只是做同一件事的两种方式?

什么时候我应该选择其中一个而不是另一个?

我在我的_Layout.cshtml中定义了这个部分

@RenderSection("Scripts", false)

我可以很容易地从视图中使用它:

@section Scripts { 
    @*Stuff comes here*@
}

我正在努力解决的问题是如何从局部视图将一些内容注入到这个部分中。

让我们假设这是我的视图页面:

@section Scripts { 

    <script>
        //code comes here
    </script>
}

<div>
    poo bar poo
</div>

<div>
  @Html.Partial("_myPartial")
</div>

我需要在脚本部分中从_myPartial partial视图中注入一些内容。

我该怎么做呢?

在。net MVC4项目中@Styles如何。呈现作品吗?

我的意思是,在@Styles.Render(“~/Content/css”)中调用的是哪个文件?

我没有一个文件或文件夹称为“css”在我的内容文件夹。

我正在使用我正在建设的博客上的Facebook评论插件。它有一些FBXML标签,由页面上引用的facebook javascript解释。

这一切都很好,但我必须将当前的、完全限定的URL传递给插件。

<div style="width: 900px; margin: auto;">
    <div id="fb-root"></div>
    <fb:comments href="URL HERE" num_posts="10" width="900"></fb:comments>
</div>

获取当前页面URL的最佳方法是什么?请求URL。

解决方案

下面是我的解决方案的最终代码:

<fb:comments href="@Request.Url.AbsoluteUri" num_posts="15" width="900"></fb:comments>

我正在asp.net mvc 3中开发一个web应用程序。 我对它很陌生。在使用razor的视图中,我想声明一些局部变量,并在整个页面中使用它。如何做到这一点呢?

能够执行以下操作似乎相当简单:

@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
@if (isUserConnected)
{ // meaning that the viewing user has not been saved
    <div>
        <div> click to join us </div>
        <a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
    </div>
}

但这行不通。这可能吗?

我有安全/消毒HTML保存在一个DB表。

如何在Razor视图中写出这个HTML内容?

它总是将<和&字符转义为&。

对于WebForms视图引擎,我通常将三元操作符用于非常简单的条件,特别是在HTML属性中。例如:

<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>

上面的代码将根据用户是否经过身份验证,为<a>标记提供一个auth或anon类。

Razor视图引擎的等效语法是什么?因为Razor要求HTML标签“知道”何时插入和跳出代码和标记,我目前被以下问题困住了:

@if(User.Identity.IsAuthenticated)  { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }

说得委婉点,这是可怕的。

我很想做这样的事情,但我很难理解如何在Razor:

<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>

--

更新:

同时,我创建了这个HtmlHelper:

public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
  return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}

从Razor可以这样称呼:

<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>

尽管如此,我还是希望有一种方法可以使用三元操作符,而不用回到扩展方法中。