标签: asp.net-mvc-3

使用Razor View Engine从部分视图ASP.NET MVC 3中将内容注入特定部分

我在本节中定义了此部分 _Layout.cshtml

@RenderSection("Scripts", false)
Run Code Online (Sandbox Code Playgroud)

我可以从视图中轻松使用它:

@section Scripts { 
    @*Stuff comes here*@
}
Run Code Online (Sandbox Code Playgroud)

我正在努力的是如何从局部视图中获取本节内注入的一些内容.

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

@section Scripts { 

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

<div>
    poo bar poo
</div>

<div>
  @Html.Partial("_myPartial")
</div>
Run Code Online (Sandbox Code Playgroud)

我需要Scripts_myPartial局部视图中注入部分内容.

我怎样才能做到这一点?

asp.net asp.net-mvc partial-views razor asp.net-mvc-3

316
推荐指数
8
解决办法
19万
查看次数

如何在ASP.NET MVC 3 razor ViewStart文件中指定不同的布局?

我希望在我的应用程序中有2个单独的布局.假设一个是网站的公共部分,另一个是会员方面.

为简单起见,我们可以说每个站点的所有逻辑都整齐地包含在2个不同的控制器中.

  • PublicController
  • StaffController

并且它们每个都具有相应的布局,用于每个视图下的所有视图.

  • _PublicLayout.cshtml
  • _StaffLayout.cshtml

如何使用_ViewStart.cshtml文件指定"Public"下的所有View/Action使用PublicLayout,"Staff"下的所有内容都使用StaffLayout?

谢谢!

asp.net-mvc layout razor asp.net-mvc-3

308
推荐指数
3
解决办法
16万
查看次数

ASP.NET MVC 3 - 部分vs显示模板与编辑器模板

所以,标题应该说明一切.

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

局部视图:

@Html.Partial(Model.Foo, "SomePartial")
Run Code Online (Sandbox Code Playgroud)

自定义编辑模板:

@Html.EditorFor(model => model.Foo)
Run Code Online (Sandbox Code Playgroud)

自定义显示模板:

@Html.DisplayFor(model => model.Foo)
Run Code Online (Sandbox Code Playgroud)

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

@model WebApplications.Models.FooObject

<!-- Bunch of HTML -->
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是 - 你何时/如何决定使用三者中的哪一个?

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

以下是我使用EditorFor/DisplayFor找到的2件更好的东西:

  1. 它们在呈现HTML帮助程序时尊重模型层次结构(例如,如果在"Foo"模型上有"Bar"对象,则"Bar"的HTML元素将使用"Foo.Bar.ElementName"呈现,而部分将具有"的ElementName").

  2. 更强大,例如,如果你List<T>在ViewModel中有一些东西,你可以使用@Html.DisplayFor(model => model.CollectionOfFoo),而MVC足够聪明,可以看到它是一个集合,并为每个项目渲染单个显示(而不是Partial,这需要一个明确的环).

我也听说DisplayFor呈现了一个"只读"模板,但我不明白 - 我不能在那里扔一个表格吗?

有人能告诉我一些其他原因吗?是否有一个列表/文章比较这三个?

asp.net-mvc asp.net-mvc-partialview editortemplates razor asp.net-mvc-3

302
推荐指数
3
解决办法
7万
查看次数

找到了多个匹配名为"Home"的控制器的类型

我目前在线托管了两个不相关的MVC3项目.

一个工作正常,另一个不起作用,给我错误:

找到了多个匹配名为"Home"的控制器的类型.如果为此请求提供服务的路由('{controller}/{action}/{id}')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况.

如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由.

我的主机工作方式是他给我FTP访问权限,在该文件夹中我有两个其他文件夹,一个用于我的每个应用程序.

ftpFolderA2/foo.com

ftpFolderA2/bar.com

foo.com工作正常,我将我的应用程序发布到我的本地文件系统然后FTP内容,它的工作原理.

当我上传并尝试运行bar.com时,上面的问题会触发并阻止我使用我的网站.所有foo.com仍然有效.

bar.com是否在ftpFolderA2内部的控制器中搜索,这就是为什么它会找到另一个HomeController?我怎么能告诉它只应该看看Controller文件夹呢?

事实:

  1. 不使用区域.这是两个完全不相关的项目.我将每个已发布的项目放入每个相应的文件夹 没有什么花哨.
  2. 每个项目只有1个HomeController.

有人可以证实这是问题吗?

c# controller asp.net-mvc-3

302
推荐指数
13
解决办法
17万
查看次数

视图中的多个模型

我希望在一个视图中有2个模型.该页面包含LoginViewModelRegisterViewModel.

例如

public class LoginViewModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}

public class RegisterViewModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我是否需要创建另一个包含这两个ViewModel的ViewModel?

public BigViewModel
{
    public LoginViewModel LoginViewModel{get; set;}
    public RegisterViewModel RegisterViewModel {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我需要将验证属性提交给视图,这就是我需要ViewModel的原因.

是不是有另一种方式,如(没有BigViewModel):

 @model ViewModel.RegisterViewModel
 @using (Html.BeginForm("Login", "Auth", FormMethod.Post))
 {
        @Html.TextBoxFor(model => model.Name)
        @Html.TextBoxFor(model …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-3

293
推荐指数
7
解决办法
39万
查看次数

ASP.NET Razor中的HTML.ActionLink与Url.Action

HTML.ActionLinkvs 之间有什么区别,Url.Action或者只是两种方式做同样的事情?

我什么时候应该更喜欢一个?

asp.net-mvc razor asp.net-mvc-3

290
推荐指数
5
解决办法
42万
查看次数

将文件返回到ASP.NET MVC中的查看/下载

我在ASP.NET MVC中将存储在数据库中的文件发送回用户时遇到问题.我想要的是一个列出两个链接的视图,一个用于查看文件并让发送给浏览器的mimetype确定应该如何处理,另一个用于强制下载.

如果我选择查看调用的文件SomeRandomFile.bak并且浏览器没有关联的程序来打开这种类型的文件,那么我没有问题,它默认为下载行为.但是,如果我选择查看调用的文件,SomeRandomFile.pdf或者SomeRandomFile.jpg我希望文件只是打开.但是我也希望将下载链接保留在一边,这样无论文件类型如何,我都可以强制下载提示.这有意义吗?

我已经尝试过FileStreamResult它适用于大多数文件,它的构造函数默认不接受文件名,因此根据url(根据内容类型不知道要提供的扩展名)为未知文件分配文件名.如果我通过指定强制文件名,我将失去浏览器直接打开文件的能力,我得到一个下载提示.有人遇到过这种情况么.

这些是我迄今为止尝试过的例子.

//Gives me a download prompt.
return File(document.Data, document.ContentType, document.Name);
Run Code Online (Sandbox Code Playgroud)

//Opens if it is a known extension type, downloads otherwise (download has bogus name and missing extension)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType);
Run Code Online (Sandbox Code Playgroud)

//Gives me a download prompt (lose the ability to open by default if known type)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType) {FileDownloadName = document.Name};
Run Code Online (Sandbox Code Playgroud)

有什么建议?

c# asp.net-mvc download http-headers asp.net-mvc-3

284
推荐指数
5
解决办法
33万
查看次数

将Ajax.BeginForm与ASP.NET MVC 3 Razor一起使用

是否存在Ajax.BeginForm在Asp.net MVC 3中使用的教程或代码示例,其中存在不显眼的验证和Ajax?

对于MVC 3来说,这是一个难以捉摸的话题,我似乎无法让我的表单正常工作.它将执行Ajax提交但忽略验证错误.

asp.net-mvc asp.net-mvc-3

261
推荐指数
5
解决办法
34万
查看次数

ReSharper警告:"通用类型的静态字段"

public class EnumRouteConstraint<T> : IRouteConstraint
    where T : struct
{
    private static readonly Lazy<HashSet<string>> _enumNames; // <--

    static EnumRouteConstraint()
    {
        if (!typeof(T).IsEnum)
        {
            throw new ArgumentException(
                Resources.Error.EnumRouteConstraint.FormatWith(typeof(T).FullName));
        }

        string[] names = Enum.GetNames(typeof(T));
        _enumNames = new Lazy<HashSet<string>>(() => new HashSet<string>
        (
            names.Select(name => name), StringComparer.InvariantCultureIgnoreCase
        ));
    }

    public bool Match(HttpContextBase httpContext, Route route, 
                        string parameterName, RouteValueDictionary values, 
                        RouteDirection routeDirection)
    {
        bool match = _enumNames.Value.Contains(values[parameterName].ToString());
        return match;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是错的吗?我会假设这实际上有一个static readonly字段用于EnumRouteConstraint<T>我碰巧实例化的每一个.

c# generics resharper static asp.net-mvc-3

251
推荐指数
4
解决办法
4万
查看次数

Html5数据 - *与asp.net mvc TextboxFor html属性

如何data-*使用TextboxFor 添加html属性?

这就是我目前拥有的:

@Html.TextBoxFor(model => model.Country.CountryName, new { data-url= Url.Action("CountryContains", "Geo") })
Run Code Online (Sandbox Code Playgroud)

如你所见,这-引起了一个问题data-url.这是怎么回事?

asp.net-mvc html5 asp.net-mvc-3

237
推荐指数
1
解决办法
7万
查看次数