ASP.NET MVC 3是用于在.NET框架中开发Web应用程序的Model-View-Controller扩展的第三个主要版本。
使用MVC3 AJAX调用线程或任务 我有一个MVC3项目,具有.NET 4.5(由于各种原因,我们无法升级到MVC4)。我需要运行三个数据库查询,每个查询需要几秒钟才能填充三组DAT ...
因此,我试图将其放入一个Ajax调用中,但我仍然想同时执行三个查询。
我想编写所有将发送到浏览器的代码,以将其完整地控制。 为此,我需要完全禁用带有ASP.NET MVC的JavaScript验证。 ho ...
add css或javaScript文件以从视图或部分视图中布局头部。 layout页面头:
layout页面头: <head> <link href="@Url.Content("~/Content/themes/base/Site.css")" rel="stylesheet" type="text/css" /> </head> 应用程序需要的视图(另一个视图): <link href="@Url.Content("~/Content/themes/base/AnotherPage.css")" rel="stylesheet" type="text/css" /> 另一个视图具有部分视图(另一种情况),需要: <link href="@Url.Content("~/Content/themes/base/AnotherPartial.css")" rel="stylesheet" type="text/css" /> 问题:我们如何才能add这些CSS文件链接Anotherview和另一个与布局的链接to Layout head?? Rendersection不是一个好主意,因为另一页可以具有多个部分。将所有CSS添加到头部没有用,因为它会改变动态性(这取决于另一页)。 layout: <html> <head> <meta charset="utf-8" /> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/modernizr-2.0.6-development-only.js")" type="text/javascript"></script> @if (IsSectionDefined("AddToHead")) { @RenderSection("AddToHead", required: false) } @RenderSection("AddToHeadAnotherWay", required: false) </head> 视图: @model ProjectsExt.Models.DirectoryObject @section AddToHead{ <link href="@Url.Content("~/Content/Upload.css")" rel="stylesheet" type="text/css" /> } update:基本示例,请访问Https://github.com/speier/mvcassetshelper 我们正在使用以下实现将JS和CSS文件添加到布局页面。 视图或部分视图: @{ Html.Assets().Styles.Add("/Dashboard/Content/Dashboard.css"); Html.Assets().Scripts.Add("/Dashboard/Scripts/Dashboard.js"); } layout页面: <head> @Html.Assets().Styles.Render() </head> <body> ... @Html.Assets().Scripts.Render() </body> HTMLHELPER扩展名: public static class HtmlHelperExtensions { public static AssetsHelper Assets(this HtmlHelper htmlHelper) { return AssetsHelper.GetInstance(htmlHelper); } } public class AssetsHelper { public static AssetsHelper GetInstance(HtmlHelper htmlHelper) { var instanceKey = "AssetsHelperInstance"; var context = htmlHelper.ViewContext.HttpContext; if (context == null) return null; var assetsHelper = (AssetsHelper)context.Items[instanceKey]; if (assetsHelper == null) context.Items.Add(instanceKey, assetsHelper = new AssetsHelper()); return assetsHelper; } public ItemRegistrar Styles { get; private set; } public ItemRegistrar Scripts { get; private set; } public AssetsHelper() { Styles = new ItemRegistrar(ItemRegistrarFormatters.StyleFormat); Scripts = new ItemRegistrar(ItemRegistrarFormatters.ScriptFormat); } } public class ItemRegistrar { private readonly string _format; private readonly IList<string> _items; public ItemRegistrar(string format) { _format = format; _items = new List<string>(); } public ItemRegistrar Add(string url) { if (!_items.Contains(url)) _items.Add(url); return this; } public IHtmlString Render() { var sb = new StringBuilder(); foreach (var item in _items) { var fmt = string.Format(_format, item); sb.AppendLine(fmt); } return new HtmlString(sb.ToString()); } } public class ItemRegistrarFormatters { public const string StyleFormat = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />"; public const string ScriptFormat = "<script src=\"{0}\" type=\"text/javascript\"></script>"; } 您可以在布局中通过申请方法定义该部分。 layout <head> <link href="@Url.Content("~/Content/themes/base/Site.css")" rel="stylesheet" type="text/css" /> @RenderSection("heads", required: false) </head> 然后,您可以在视图中的部分区域中包括您的CSS文件。 该部分的工作,但不能以Design的方式进行部分视图。 <!--your code --> @section heads { <link href="@Url.Content("~/Content/themes/base/AnotherPage.css")" rel="stylesheet" type="text/css" /> } 如果您真的想在部分视图中使用截面区域,则可以按照文章重新定义渲染方法。 razor,嵌套的布局和重新定义的部分 - ASP.NET上的Marcin aaddly,默认情况下不可能使用section其他用户所建议的,因为A仅适用于Asection的即时child。 但是,有效的工作是在每个视图中进行实践和重新定义View,含义: section 这种方式每种观点都可以实现一个头部部分,而不仅仅是直接的孩子。但是,这只有部分作用,尤其是在多个部分开始时,麻烦开始了(如您在问题中所提到的)。 因此,解决问题的唯一真正解决方案是使用section Head { @RenderSection("Head", false) } 。最好的可能是CSS和脚本的单独集合(列表)。为此,您需要确保在执行任何视图之前初始化使用的ViewBag使用。然后,您可以在每个视图/部分的顶部进行这样的事情(而不必关心List或Scripts值是null: Styles 在布局中,您可以在集合中循环循环,并根据ViewBag.Scripts.Add("myscript.js"); ViewBag.Styles.Add("mystyle.css"); 的值添加样式。 List 我认为这很丑陋,但这是唯一起作用的东西。 ******更新**** 由于它首先开始执行内部视图并努力到布局和CSS样式正在级联,因此通过@foreach (var script in ViewBag.Scripts) { <script type="text/javascript" src="@script"></script> } @foreach (var style in ViewBag.Styles) { <link href="@style" rel="stylesheet" type="text/css" /> } .扭转样式列表可能是有意义的。 这种方式首先添加了最外在的样式,这与CSS样式表的工作方式内联。 我试图解决这个问题。 我的答案在这里。 “ dynamicheader” - http://dynamicheader.codeplex.com/,Https://nuget.org/packages/dynamicheader 例如,_layout.cshtml是: ViewBag.Styles.Reverse(),您可以将.js和.css文件注册到“ DynyCheader”whewhere您想要的。 ,例如,eNTEPARTIAL.CSHTML中的代码块是:<head> @Html.DynamicHeader() </head> ... 该样本的html输出的回流为: @{ DynamicHeader.AddSyleSheet("~/Content/themes/base/AnotherPartial.css"); DynamicHeader.AddScript("~/some/myscript.js"); } 我也有类似的问题,最终将Kalman的出色答案应用于以下代码(不太整洁,但可以说是更容易扩展的): <html> <link href="/myapp/Content/themes/base/AnotherPartial.css" .../> <script src="/myapp/some/myscript.js" ...></script> </html> ... 项目包含静态分配方法: namespace MvcHtmlHelpers { //http://stackoverflow.com/questions/5110028/add-css-or-js-files-to-layout-head-from-views-or-partial-views#5148224 public static partial class HtmlExtensions { public static AssetsHelper Assets(this HtmlHelper htmlHelper) { return AssetsHelper.GetInstance(htmlHelper); } } public enum BrowserType { Ie6=1,Ie7=2,Ie8=4,IeLegacy=7,W3cCompliant=8,All=15} public class AssetsHelper { public static AssetsHelper GetInstance(HtmlHelper htmlHelper) { var instanceKey = "AssetsHelperInstance"; var context = htmlHelper.ViewContext.HttpContext; if (context == null) {return null;} var assetsHelper = (AssetsHelper)context.Items[instanceKey]; if (assetsHelper == null){context.Items.Add(instanceKey, assetsHelper = new AssetsHelper(htmlHelper));} return assetsHelper; } private readonly List<string> _styleRefs = new List<string>(); public AssetsHelper AddStyle(string stylesheet) { _styleRefs.Add(stylesheet); return this; } private readonly List<string> _scriptRefs = new List<string>(); public AssetsHelper AddScript(string scriptfile) { _scriptRefs.Add(scriptfile); return this; } public IHtmlString RenderStyles() { ItemRegistrar styles = new ItemRegistrar(ItemRegistrarFormatters.StyleFormat,_urlHelper); styles.Add(Libraries.UsedStyles()); styles.Add(_styleRefs); return styles.Render(); } public IHtmlString RenderScripts() { ItemRegistrar scripts = new ItemRegistrar(ItemRegistrarFormatters.ScriptFormat, _urlHelper); scripts.Add(Libraries.UsedScripts()); scripts.Add(_scriptRefs); return scripts.Render(); } public LibraryRegistrar Libraries { get; private set; } private UrlHelper _urlHelper; public AssetsHelper(HtmlHelper htmlHelper) { _urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); Libraries = new LibraryRegistrar(); } } public class LibraryRegistrar { public class Component { internal class HtmlReference { internal string Url { get; set; } internal BrowserType ServeTo { get; set; } } internal List<HtmlReference> Styles { get; private set; } internal List<HtmlReference> Scripts { get; private set; } internal List<string> RequiredLibraries { get; private set; } public Component() { Styles = new List<HtmlReference>(); Scripts = new List<HtmlReference>(); RequiredLibraries = new List<string>(); } public Component Requires(params string[] libraryNames) { foreach (var lib in libraryNames) { if (!RequiredLibraries.Contains(lib)) { RequiredLibraries.Add(lib); } } return this; } public Component AddStyle(string url, BrowserType serveTo = BrowserType.All) { Styles.Add(new HtmlReference { Url = url, ServeTo=serveTo }); return this; } public Component AddScript(string url, BrowserType serveTo = BrowserType.All) { Scripts.Add(new HtmlReference { Url = url, ServeTo = serveTo }); return this; } } private readonly Dictionary<string, Component> _allLibraries = new Dictionary<string, Component>(); private List<string> _usedLibraries = new List<string>(); internal IEnumerable<string> UsedScripts() { SetOrder(); var returnVal = new List<string>(); foreach (var key in _usedLibraries) { returnVal.AddRange(from s in _allLibraries[key].Scripts where IncludesCurrentBrowser(s.ServeTo) select s.Url); } return returnVal; } internal IEnumerable<string> UsedStyles() { SetOrder(); var returnVal = new List<string>(); foreach (var key in _usedLibraries) { returnVal.AddRange(from s in _allLibraries[key].Styles where IncludesCurrentBrowser(s.ServeTo) select s.Url); } return returnVal; } public void Uses(params string[] libraryNames) { foreach (var name in libraryNames) { if (!_usedLibraries.Contains(name)){_usedLibraries.Add(name);} } } public bool IsUsing(string libraryName) { SetOrder(); return _usedLibraries.Contains(libraryName); } private List<string> WalkLibraryTree(List<string> libraryNames) { var returnList = new List<string>(libraryNames); int counter = 0; foreach (string libraryName in libraryNames) { WalkLibraryTree(libraryName, ref returnList, ref counter); } return returnList; } private void WalkLibraryTree(string libraryName, ref List<string> libBuild, ref int counter) { if (counter++ > 1000) { throw new System.Exception("Dependancy library appears to be in infinate loop - please check for circular reference"); } Component library; if (!_allLibraries.TryGetValue(libraryName, out library)) { throw new KeyNotFoundException("Cannot find a definition for the required style/script library named: " + libraryName); } foreach (var childLibraryName in library.RequiredLibraries) { int childIndex = libBuild.IndexOf(childLibraryName); if (childIndex!=-1) { //child already exists, so move parent to position before child if it isn't before already int parentIndex = libBuild.LastIndexOf(libraryName); if (parentIndex>childIndex) { libBuild.RemoveAt(parentIndex); libBuild.Insert(childIndex, libraryName); } } else { libBuild.Add(childLibraryName); WalkLibraryTree(childLibraryName, ref libBuild, ref counter); } } return; } private bool _dependenciesExpanded; private void SetOrder() { if (_dependenciesExpanded){return;} _usedLibraries = WalkLibraryTree(_usedLibraries); _usedLibraries.Reverse(); _dependenciesExpanded = true; } public Component this[string index] { get { if (_allLibraries.ContainsKey(index)) { return _allLibraries[index]; } var newComponent = new Component(); _allLibraries.Add(index, newComponent); return newComponent; } } private BrowserType _requestingBrowser; private BrowserType RequestingBrowser { get { if (_requestingBrowser == 0) { var browser = HttpContext.Current.Request.Browser.Type; if (browser.Length > 2 && browser.Substring(0, 2) == "IE") { switch (browser[2]) { case '6': _requestingBrowser = BrowserType.Ie6; break; case '7': _requestingBrowser = BrowserType.Ie7; break; case '8': _requestingBrowser = BrowserType.Ie8; break; default: _requestingBrowser = BrowserType.W3cCompliant; break; } } else { _requestingBrowser = BrowserType.W3cCompliant; } } return _requestingBrowser; } } private bool IncludesCurrentBrowser(BrowserType browserType) { if (browserType == BrowserType.All) { return true; } return (browserType & RequestingBrowser) != 0; } } public class ItemRegistrar { private readonly string _format; private readonly List<string> _items; private readonly UrlHelper _urlHelper; public ItemRegistrar(string format, UrlHelper urlHelper) { _format = format; _items = new List<string>(); _urlHelper = urlHelper; } internal void Add(IEnumerable<string> urls) { foreach (string url in urls) { Add(url); } } public ItemRegistrar Add(string url) { url = _urlHelper.Content(url); if (!_items.Contains(url)) { _items.Add( url); } return this; } public IHtmlString Render() { var sb = new StringBuilder(); foreach (var item in _items) { var fmt = string.Format(_format, item); sb.AppendLine(fmt); } return new HtmlString(sb.ToString()); } } public class ItemRegistrarFormatters { public const string StyleFormat = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />"; public const string ScriptFormat = "<script src=\"{0}\" type=\"text/javascript\"></script>"; } } 在_layout页面 assets.Libraries["jQuery"] .AddScript("~/Scripts/jquery-1.10.0.min.js", BrowserType.IeLegacy) .AddScript("~/Scripts//jquery-2.0.1.min.js",BrowserType.W3cCompliant); /* NOT HOSTED YET - CHECK SOON .AddScript("//ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js",BrowserType.W3cCompliant); */ assets.Libraries["jQueryUI"].Requires("jQuery") .AddScript("//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js",BrowserType.Ie6) .AddStyle("//ajax.aspnetcdn.com/ajax/jquery.ui/1.9.2/themes/eggplant/jquery-ui.css",BrowserType.Ie6) .AddScript("//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js", ~BrowserType.Ie6) .AddStyle("//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/themes/eggplant/jquery-ui.css", ~BrowserType.Ie6); assets.Libraries["TimePicker"].Requires("jQueryUI") .AddScript("~/Scripts/jquery-ui-sliderAccess.min.js") .AddScript("~/Scripts/jquery-ui-timepicker-addon-1.3.min.js") .AddStyle("~/Content/jQueryUI/jquery-ui-timepicker-addon.css"); assets.Libraries["Validation"].Requires("jQuery") .AddScript("//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js") .AddScript("~/Scripts/jquery.validate.unobtrusive.min.js") .AddScript("~/Scripts/mvcfoolproof.unobtrusive.min.js") .AddScript("~/Scripts/CustomClientValidation-1.0.0.min.js"); assets.Libraries["MyUtilityScripts"].Requires("jQuery") .AddScript("~/Scripts/GeneralOnLoad-1.0.0.min.js"); assets.Libraries["FormTools"].Requires("Validation", "MyUtilityScripts"); assets.Libraries["AjaxFormTools"].Requires("FormTools", "jQueryUI") .AddScript("~/Scripts/jquery.unobtrusive-ajax.min.js"); assets.Libraries["DataTables"].Requires("MyUtilityScripts") .AddScript("//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js") .AddStyle("//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css") .AddStyle("//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables_themeroller.css"); assets.Libraries["MvcDataTables"].Requires("DataTables", "jQueryUI") .AddScript("~/Scripts/jquery.dataTables.columnFilter.min.js"); assets.Libraries["DummyData"].Requires("MyUtilityScripts") .AddScript("~/Scripts/DummyData.js") .AddStyle("~/Content/DummyData.css"); 在部分和视图中 @{ var assets = Html.Assets(); CurrentResources.AssignAllResources(assets); Html.Assets().RenderStyles() } </head> ... @Html.Assets().RenderScripts() </body> here是一个名为cassette的nuget插件,其中包括您能够部分参考脚本和样式。 尽管有一个可用于此插件的配置数量,这使其非常灵活。这是引用脚本或样式表文件的最简单方法: Html.Assets().Libraries.Uses("DataTables"); Html.Assets().AddScript("~/Scripts/emailGridUtilities.js"); acording the Documentation: to calls toBundles.Reference("scripts/app"); 可以在页面,布局或部分视图中出现。 路径论点可以是以下一个: 捆绑路径 ANAN ASSET PATH-包含此资产的整个捆绑包被参考 url 尝试开箱即用的解决方案(ASP.NET MVC 4或更高版本): Reference 对于我们这些使用ASP.NET MVC 4的人 - 这可能会有所帮助。 首先,我在app_start文件夹中添加了一个bundleconfig类。 在这里我用来创建它的代码: @{ var bundle = BundleTable.Bundles.GetRegisteredBundles().First(b => b.Path == "~/js"); bundle.Include("~/Scripts/myFile.js"); } 秒,我在global.asax文件中注册了Bundleconfig类: using System.Web.Optimization; public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/SiteMaster.css")); } } ,第三,我在我的CSS文件中添加了样式助手: protected void Application_Start() { BundleConfig.RegisterBundles(BundleTable.Bundles); } 我在任何视图中都使用了此语法: /* Styles for validation helpers */ .field-validation-error { color: red; font-weight: bold; } .field-validation-valid { display: none; } input.input-validation-error { border: 1px solid #e80c4d; } input[type="checkbox"].input-validation-error { border: 0 none; } .validation-summary-errors { color: #e80c4d; font-weight: bold; font-size: 1.1em; } .validation-summary-valid { display: none; } i写了一个简单的包装器,可让您在每个部分视图中注册样式并在每个部分视图中注册到头标签中。 它基于Dynamicheader JSakamoto提出的基础,但它具有一些改进和调整。 它非常易于使用,并且多才多艺。 用法: @Styles.Render("~/Content/css") 您可以在内部找到完整的代码,解释和示例: add样式和脚本动态到头标签
同步webrequest,是否有必要? 我正在编写RouteHandler作为我的MVC3解决方案的一部分。目的是从我的云存储中获取图像和文件,并在掩盖云存储URL的同时将其传递到浏览器。 一切...
I.E。如果浏览器获取图像的默认方式来自同步线程,那么我很高兴这样做。 是这样的情况?
为什么默认的 ASP.NET MVC 3 项目不使用控制器?
创建新的 ASP.NET MVC 3 Razor 站点时,有 9 个 Account\*.cshtml 文件,这些文件似乎是视图,控制器逻辑插入在视图顶部的匿名代码块中。我在那里...
我在IIS7.5的同一个网站下有2个应用程序。问题如下: 打开浏览器并登录第一个应用程序; 打开另一个浏览器选项卡并登录第二个应用程序; 该f...
为什么会员资格 IsApproved 将自身设置为 false?
我有一些用户的数据库中的 IsApproved 列设置为 false。这意味着他们无法登录。 发生这种情况的原因是什么?如何防止 IsApproved 被拒绝...
为什么 View.Title == ViewData["Title"] 会导致错误:“名称‘View’在当前上下文中不存在”?
我对用于 ASP.NET MVC 的 Razor ViewEngine 感到困惑。 你们大多数人会说: 视图.标题 与 查看数据[“标题”] 运行应用程序后我得到这个 编译器错误消息:
您必须在 LinkedIn 中指定一个有效的 JavaScript API 域作为此密钥配置的一部分
我正在尝试创建一个带有 LinkedIn 共享选项和回调选项的 MVC4 应用程序。 我使用我的应用程序 ID 在 Layout.cshtml 中引用我的脚本。 <question vote="7"> <p>我正在尝试创建一个带有 LinkedIn 共享选项和回调选项的 MVC4 应用程序。</p> <p>我使用我的应用程序 ID 在 Layout.cshtml 中引用我的脚本。</p> <pre><code> <script type="text/javascript" src="//platform.linkedin.com/in.js"> api_key: APIkeyGOEShere </script> <script type="text/javascript"> function testme(count) { alert("That document has been shared: " + count + " times"); } </script> </code></pre> <p>但是萤火虫显示如下图所示的消息</p> <p><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvd2laS3cuanBn" alt="enter image description here"/></p> <p>但我确信我的 AppID 是正确的。我不知道出现这个错误的原因是什么。</p> <p><strong>编辑</strong></p> <p>我将 api_key 放在单引号内</p> <pre><code> <script type="text/javascript" src="//platform.linkedin.com/in.js"> api_key: 'APIkeyGOEShere' </script> </code></pre> <p>但我在 Firebug 中得到了不同的结果</p> <blockquote> <p>错误:API 密钥无效抛出新错误(“API 密钥无效”);</p> </blockquote> <p>将 API 密钥放入 JavaScript 中是否需要特定的格式?</p> </question> <answer tick="false" vote="13"> <p>删除 apikey 周围的引号。这就是问题所在。</p> </answer> <answer tick="true" vote="10"> <p>您的 API 密钥看起来有点短...</p> <p>您刚刚注册了 API 密钥吗?根据尤金·奥尼尔在<a href="http://developer.linkedin.com/forum/api-key">此论坛</a>上的说法:</p> <blockquote> <p>注册 API 密钥并指定有效域名后,可能会 更改最多需要 30 分钟才能生效,因此如果没有生效 立即工作,去喝杯咖啡然后回来看看。</p> </blockquote> <p>此外,请确保指定了您的 API 域。</p> <p>他概述了整个系列的步骤如下:</p> <blockquote> <p>注册 API 密钥:</p> <p>前往 <a href="https://www.linkedin.com/secure/developer">https://www.linkedin.com/secure/developer</a> </p> <p>登录并 单击链接添加新应用程序</p> <p>填写以下信息:</p> <ul> <li><p>公司(从下拉列表中选择)</p></li> <li><p>应用程序名称(例如我的公司 工作)</p></li> <li><p>描述(例如,用于接收工作申请 申请者)</p></li> <li><p>JavaScript API 域(这是重要的一步。这是 按钮将打开的网站,例如<a href="http://www.mycompany.com">http://www.mycompany.com</a>)</p></li> <li><p>应用程序使用(如果没有与您匹配的内容,请从列表中选择一项) 有需要请选择“其他”)</p></li> <li><p>开发者联系电子邮件(您的电子邮件地址)</p></li> <li><p>电话(如果出现问题,可以联系您的电话号码) 帐户)</p></li> </ul> <p>勾选“我同意”安全文本(输入您同意的字符) 见上面)</p> </blockquote> </answer> <answer tick="false" vote="10"> <p>在此形式中:</p> <p><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvd3U3WDMucG5n" alt="JavaScript Settings"/></p> <p>您必须输入您的域名,单击<strong>添加</strong>,然后单击<strong>更新</strong>按钮进行确认。 </p> <p>我不是第一次这么做了。即使我的域名出现在屏幕上,它们也没有提交。 </p> <p>我也遇到这个问题了。 </p> <p>我调试了一个小时这个问题,然后我意识到 LinkedIn 一开始并没有保存我的“有效 SDK 域”。 </p> </answer> <answer tick="false" vote="0"> <p>添加 Paul Nowak 的正确<a href="https://stackoverflow.com/a/31202897/1114926">答案</a>有助于解决我的问题。</p> <p>也不要忘记在这里设置正确的网址。</p> <p>菜单选项</p> <p><a href="https://i.sstatic.net/s1qSa.png" rel="nofollow noreferrer"><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvczFxU2EucG5n" alt="enter image description here"/></a></p> <p>网址在这里</p> <p><a href="https://i.sstatic.net/BVdMN.png" rel="nofollow noreferrer"><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvQlZkTU4ucG5n" alt="enter image description here"/></a></p> </answer> </body></html>
假设我有一个包含名字和姓氏的 Person 类。我希望用户必须在 UI 中至少输入两个值之一,但他可能不必输入每个值。 如果我提出要求...
有没有办法确定视图是否渲染为部分视图? 我希望通过捕捉这个来扩展我正在编写的部分的重用......并且如果需要的话分配适当的布局t......
首先,我在“视图”>“博客”>“显示模板”中有一个显示模板: @model Domain.Model.BlogPost @Html.ActionLink(Model.Title, "post", new { Id = Model.PostID }... 首先,我在“视图”>“博客”>“显示模板”中有一个显示模板: @model Domain.Model.BlogPost <div class="blogSummary"> @Html.ActionLink(Model.Title, "post", new { Id = Model.PostID }, new { @class = "titleLink" }) <div class="subInfo"> Posted by @Model.Author on @Model.PostedDate.ToString("D") | @Model.PostComments.Count Comment(s)</div> <br /> <div class="summaryText"> @Html.Markdown(Model.Body.Length > 300 ? Model.Body.Remove(0, 300) + "..." : Model.Body) @Html.ActionLink("(view more)", "post", new { Id = Model.PostID }) </div> </div> 那么我有一个看法: @model IEnumerable<Domain.Model.BlogPost> @{ ViewBag.Title = "Index"; } @Html.DisplayFor(x => x, "BlogPostSummary") 但是,我在 DisplayFor(): 上遇到错误 模型项传入 字典的类型是 'System.Data.Objects.ObjectSet`1[Domain.Model.BlogPost]', 但这本词典需要一个模型 类型为“Domain.Model.BlogPost”的项目。 我有点难以理解发生了什么。使用显示模板的最佳方式是什么? 问题是您正在尝试传递一组 BlogPost,而需要的是单个 BlogPost。 尝试: @Html.DisplayFor(x => x[0], "BlogPostSummary") 或者类似的东西: @foreach (var post in Model) @Html.Display(post) 注意:我不相信第二个示例是否正确使用了 Html.Display。我怀疑使用部分代码而不是显示模板会更好。 UI提示 默认情况下,ASP.NET MVC 依赖命名约定将类链接到 BlogPost.cshtml 显示模板。但是,如果您想使用 CustomBlogPost.cshtml 作为显示模板,则可以通过应用 BlogPost 属性来实现。 UIHint 也许可以试试这个 public class DomainModel { [UIHint("CustomBlogPost")] public BlogPost Post { get; set; } } 我一直在研究同样的问题,我想我有更好的解决方案给你。 您可以循环遍历集合,并且仍然可以正常工作: @Html.DisplayFor(x => x.First(), "BlogPostSummary") 在 lambda 表达式的左侧使用变量并不一定要求您也在右侧使用它。 @foreach(var blogPost in Model) { Html.DisplayFor(x => blogPost, "BlogPostSummary") } 期待 DisplayFor。 TModel 是模型的类型,例如 Expression<Func<TModel, TValue>>,但 TValue 可以是您喜欢的任何类型。 因此,只要您拥有对集合中当前项目的引用(如上面的 foreach 所示),您就可以忽略 lambda 表达式的左侧。 (但是你必须拥有 TModel。IEnumerable<BlogPost>不起作用。) 基本上是因为执行 Html.DisplayFor(() => blogPost, "BlogPostSummary") 隐式告诉 MVC 要传递的模型是传递视图的模型,即 @Html.DisplayFor() 您需要做的是枚举模型,并显示每个模型: IEnumerable<Domain.Model.BlogPost> 确保 BlogPostSummary 位于正确的文件夹中,然后就可以开始了! Necro'ing 抱歉:只是添加一个答案,因为这些都没有使用请求者询问的自动 ID。问题是您正在使用命名模板调用 DisplayTemplate 帮助程序。由于某些未知原因,ASP .Net 和 ASP .Net Core 在指定模板名称时禁用自动名称和 ID 处理。您应该将显示模板重命名为 @foreach(var blogPost in Model){ Html.RenderPartial("BlogPostSummary", blogPost) } 并从调用站点中删除 /Views/Shared/DisplayTemplates/BlogPost.cshtml。所以: 模板BlogPostSummary/Views/Shared/DisplayTemplates/BlogPost.cshtml 无论您在何处尝试引用它: @model Domain.Model.BlogPost <div class="blogSummary"> @Html.ActionLink(Model.Title, "post", new { Id = Model.PostID }, new { @class = "titleLink" }) <div class="subInfo"> Posted by @Model.Author on @Model.PostedDate.ToString("D") | @Model.PostComments.Count Comment(s)</div> <br /> <div class="summaryText"> @Html.Markdown(Model.Body.Length > 300 ? Model.Body.Remove(0, 300) + "..." : Model.Body) @Html.ActionLink("(view more)", "post", new { Id = Model.PostID }) </div> </div>
我打开了编译视图,并且刚刚更改了项目的很大一部分,因此一些视图目前不相关。 我右键单击它们并选择从项目中排除。
如何使用 jQuery 设置 ASP.NET MVC 生成的输入元素的值?
我有一个输入文本是这样的: @Html.LabelFor(model => model.EmployeeId, "员工编号") 我有一个输入文本是这样的: <div class="editor-label"> @Html.LabelFor(model => model.EmployeeId, "Employee Number") </div> <div class="editor-field textBoxEmployeeNumber"> @Html.EditorFor(model => model.EmployeeId) @Html.ValidationMessageFor(model => model.EmployeeId) </div> 生成以下html <div class="editor-label"> <label for="EmployeeId">Employee Number</label> </div> <div class="editor-field textBoxEmployeeNumber"> <input class="text-box single-line" data-val="true" data-val-number="The field EmployeeId must be a number." data-val-required="The EmployeeId field is required." id="EmployeeId" name="EmployeeId" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="EmployeeId" data-valmsg-replace="true"></span> </div> 我想使用 jquery 设置此输入文本的值,所以我这样做了: <script type="text/javascript" language="javascript"> $(function() { $('.textBoxEmployeeNumber').val("fgg"); }); </script> 但是,它不起作用...我的语法有什么错误? 您的选择器正在检索文本框周围的 <div class='textBoxEmployeeNumber'> 而不是其中的输入。 // Access the input inside the div with this selector: $(function () { $('.textBoxEmployeeNumber input').val("fgg"); }); 看到输出 HTML 后更新 如果 ASP.NET 代码可靠地输出带有 id 属性 <input> 的 HTML id='EmployeeId',您可以更简单地使用: $(function () { $('#EmployeeId').val("fgg"); }); 如果失败,您将需要在浏览器的错误控制台中验证是否存在导致此失败的其他脚本错误。 上面的第一个示例 在此演示中工作正常。 使用jQuery,我们可以使用以下代码: 输入名称选择: $('input[name="textboxname"]').val('some value') 按输入类别选择: $('input[type=text].textboxclass').val('some value') 通过输入id选择: $('#textboxid').val('some value') $(document).ready(function () { $('#EmployeeId').val("fgg"); //Or $('.textBoxEmployeeNumber > input').val("fgg"); //Or $('.textBoxEmployeeNumber').find('input').val("fgg"); }); 对于具有 id 的元素 <input id="id_input_text16" type="text" placeholder="Ender Data"></input> 您可以将值设置为 $("#id_input_text16").val("testValue"); 文档这里。 这是上课用的 $('.nameofdiv').val('we are developers'); 对于ID $('#nameofdiv').val('we are developers'); 现在如果你有一个可以使用的表单输入 $("#form li.name input.name_val").val('we are awsome developers'); 这是文件上传的另一种变体,它具有比默认文件上传浏览按钮更好看的引导按钮。 这是html: <div class="form-group"> @Html.LabelFor(model => model.FileName, htmlAttributes: new { @class = "col-md-2 control-label" }) <div class="col-md-1 btn btn-sn btn-primary" id="browseButton" onclick="$(this).parent().find('input[type=file]').click();">browse</div> <div class="col-md-7"> <input id="fileSpace" name="uploaded_file" type="file" style="display: none;"> @*style="display: none;"*@ @Html.EditorFor(model => model.FileName, new { htmlAttributes = new { @class = "form-control", @id = "modelField"} }) @Html.ValidationMessageFor(model => model.FileName, "", new { @class = "text-danger" }) </div> </div> 这是脚本: $('#fileSpace').on("change", function () { $("#modelField").val($('input[name="uploaded_file"]').val()); 纯js会更简单 EmployeeId.value = 'fgg'; EmployeeId.value = 'fgg'; <div class="editor-label"> <label for="EmployeeId">Employee Number</label> </div> <div class="editor-field textBoxEmployeeNumber"> <input class="text-box single-line" data-val="true" data-val-number="The field EmployeeId must be a number." data-val-required="The EmployeeId field is required." id="EmployeeId" name="EmployeeId" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="EmployeeId" data-valmsg-replace="true"></span> </div>