我在本节中定义了此部分 _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局部视图中注入部分内容.
我怎样才能做到这一点?
我希望在我的应用程序中有2个单独的布局.假设一个是网站的公共部分,另一个是会员方面.
为简单起见,我们可以说每个站点的所有逻辑都整齐地包含在2个不同的控制器中.
并且它们每个都具有相应的布局,用于每个视图下的所有视图.
如何使用_ViewStart.cshtml文件指定"Public"下的所有View/Action使用PublicLayout,"Staff"下的所有内容都使用StaffLayout?
谢谢!
所以,标题应该说明一切.
要在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件更好的东西:
它们在呈现HTML帮助程序时尊重模型层次结构(例如,如果在"Foo"模型上有"Bar"对象,则"Bar"的HTML元素将使用"Foo.Bar.ElementName"呈现,而部分将具有"的ElementName").
更强大,例如,如果你List<T>在ViewModel中有一些东西,你可以使用@Html.DisplayFor(model => model.CollectionOfFoo),而MVC足够聪明,可以看到它是一个集合,并为每个项目渲染单个显示(而不是Partial,这需要一个明确的环).
我也听说DisplayFor呈现了一个"只读"模板,但我不明白 - 我不能在那里扔一个表格吗?
有人能告诉我一些其他原因吗?是否有一个列表/文章比较这三个?
asp.net-mvc asp.net-mvc-partialview editortemplates razor asp.net-mvc-3
我目前在线托管了两个不相关的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文件夹呢?
事实:
有人可以证实这是问题吗?
我希望在一个视图中有2个模型.该页面包含LoginViewModel和RegisterViewModel.
例如
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) HTML.ActionLinkvs 之间有什么区别,Url.Action或者只是两种方式做同样的事情?
我什么时候应该更喜欢一个?
我在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)
有什么建议?
是否存在Ajax.BeginForm在Asp.net MVC 3中使用的教程或代码示例,其中存在不显眼的验证和Ajax?
对于MVC 3来说,这是一个难以捉摸的话题,我似乎无法让我的表单正常工作.它将执行Ajax提交但忽略验证错误.
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>我碰巧实例化的每一个.
如何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-3 ×10
asp.net-mvc ×8
razor ×4
c# ×3
asp.net ×1
controller ×1
download ×1
generics ×1
html5 ×1
http-headers ×1
layout ×1
resharper ×1
static ×1