ASP.NET MVC 3是用于在.NET框架中开发Web应用程序的Model-View-Controller扩展的第三个主要版本。
我有一个这样的模型: 公共部分类 ClassTime { 公共 int Id { 得到;放; } 公共 int ScheduleId { 获取;放; } 公共 System.TimeSpan StartClassTime { 获取;放; } 公开
这是我的网址 http://abc.domain.com/controller/action/
我想为 HtmlHelper 创建一个扩展方法,它允许我创建一个 LabelFor 属性,如果它是必填字段,则在其后面显示一个星号。我怎样才能做到这一点? 公共课 Foo { [
我正在使用 Visual Studio 2010(MVC3 Razor) 和 Windows 7 做一个 Web 项目。 我的默认浏览器是IE。当我运行该项目时,网站与 url 完美配合 http://localhost:498...
我知道什么时候可以使用静态类,但我的简单问题是: 当我们对具有静态类的代码进行单元测试时,是否存在大问题? 使用常规实例类更好吗? 那个...
我有一个 ASP.NET MVC 3 应用程序。该应用程序通过 jQuery 请求记录。 jQuery 回调控制器操作,以 JSON 格式返回结果。我还没能证明...
为什么需要 Json 请求行为? 如果我想将 HttpGet 请求限制在我的操作中,我可以使用 [HttpPost] 属性来装饰该操作 例子: [http邮报] 公共 JsonResult Foo() {...
我一直在兜圈子试图从外部网站提取元标记信息。我开始使用 XML 方法,但由于标签链接文档类型等,我的应用程序不断抛出错误...
带有自定义参数的Html.DropDownListFor()
我想在 HTML 帮助器中添加扩展方法来生成这样的选择和选项 安道尔... 我想在 HTML 帮助程序中添加扩展方法来生成这样的选择和选项 <select id="Country" name="Country"> <option data-domain="AN" value="1">Andorra</option> <option data-domain="UI" value="2">United Arab Emirates</option> <option data-domain="AF" value="3">Afghanistan</option> 选项有一个数据域属性,我可以这样使用它 @Html.DropDownListFor(m => m.Country, Model.CountryList) Model.CountryList 是国家/地区变量的数组 class Country { public String Text { get; set; } public String Value { get; set; } public String Domain { get; set; } } 请谁能给出解决方案 您可以在自定义帮助器方法的帮助下构建您的CustomDropdownListFor,如下所示: 自定义辅助方法: public static class CustomHelpers { public class CustomSelectItem : SelectListItem { public string Class { get; set; } public string Disabled { get; set; } public string SelectedValue { get; set; } } public static MvcHtmlString CustomDropdownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<CustomSelectItem> list, string selectedValue, string optionLabel, object htmlAttributes = null) { if (expression == null) { throw new ArgumentNullException("expression"); } ModelMetadata metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData); string name = ExpressionHelper.GetExpressionText((LambdaExpression)expression); return CustomDropdownList(htmlHelper, metadata, name, optionLabel, list, selectedValue, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); } private static MvcHtmlString CustomDropdownList(this HtmlHelper htmlHelper, ModelMetadata metadata, string name, string optionLabel, IEnumerable<CustomSelectItem> list, string selectedValue, IDictionary<string, object> htmlAttributes) { string fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name); if (String.IsNullOrEmpty(fullName)) { throw new ArgumentException("name"); } TagBuilder dropdown = new TagBuilder("select"); dropdown.Attributes.Add("name", fullName); dropdown.MergeAttribute("data-val", "true"); dropdown.MergeAttribute("data-val-required", "Mandatory field."); dropdown.MergeAttribute("data-val-number", "The field must be a number."); dropdown.MergeAttributes(htmlAttributes); //dropdown.MergeAttributes(new RouteValueDictionary(htmlAttributes)); dropdown.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata)); StringBuilder options = new StringBuilder(); // Make optionLabel the first item that gets rendered. if (optionLabel != null) options.Append("<option value='" + String.Empty + "'>" + optionLabel + "</option>"); foreach (var item in list) { if (item.SelectedValue == "selected" && item.Disabled == "disabled") options.Append("<option value='" + item.Value + "' class='" + item.Class + "' selected='" + item.SelectedValue + "' disabled='" + item.Disabled + "'>" + item.Text + "</option>"); else if (item.SelectedValue != "selected" && item.Disabled == "disabled") options.Append("<option value='" + item.Value + "' class='" + item.Class + "' disabled='" + item.Disabled + "'>" + item.Text + "</option>"); else if (item.SelectedValue == "selected" && item.Disabled != "disabled") options.Append("<option value='" + item.Value + "' class='" + item.Class + "' selected='" + item.SelectedValue + "'>" + item.Text + "</option>"); else options.Append("<option value='" + item.Value + "' class='" + item.Class + "'>" + item.Text + "</option>"); } dropdown.InnerHtml = options.ToString(); return MvcHtmlString.Create(dropdown.ToString(TagRenderMode.Normal)); } } 视图(剃须刀): @Html.CustomDropdownListFor(m => m.PersonId, ViewBag.PersonData as List<CustomHelpers.CustomSelectItem>, null, "---- Select ----", new { name = "personId", id = "personId"}) @Html.ValidationMessageFor(m => m.PersonId, null , new { @class = "ValidationErrors" }) 标准 DropDownList/DropDownListFor 助手不支持此功能。如果您需要此类功能,则必须从头开始编写自定义 HTML 帮助程序。您可以查看这个示例。还有另一个。 方法: public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListCodeItem> selectList) { var select = new TagBuilder("select"); var options = ""; TagBuilder option; foreach (var item in selectList) { option = new TagBuilder("option"); option.MergeAttribute("value", item.Value.ToString()); option.MergeAttribute("data-domain", item.Code.ToString()); option.SetInnerText(item.Text); options += option.ToString(TagRenderMode.Normal) + "\n"; } select.MergeAttribute("data-val", "true"); select.MergeAttribute("data-val-required", "The field is required."); select.MergeAttribute("id", name); select.MergeAttribute("name", name); select.InnerHtml = options; return new MvcHtmlString(select.ToString(TagRenderMode.Normal)); } 致电: @Html.DropDownList("name" Model.OrganizationTypeList) 稍微重构 Murat 的答案 public static class MvcHelpers { public class CustomSelectItem : SelectListItem { public string Class { get; set; } } public static MvcHtmlString CustomDropdownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<CustomSelectItem> list, string selectedValue, string optionLabel, object htmlAttributes = null) { if (expression == null) { throw new ArgumentNullException(nameof(expression)); } var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); var name = ExpressionHelper.GetExpressionText(expression); return CustomDropdownList(htmlHelper, metadata, name, optionLabel, list, selectedValue, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); } private static MvcHtmlString CustomDropdownList(HtmlHelper htmlHelper, ModelMetadata metadata, string name, string optionLabel, IEnumerable<CustomSelectItem> list, string selectedValue, IDictionary<string, object> htmlAttributes) { var fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name); if (string.IsNullOrWhiteSpace(fullName)) { throw new ArgumentException("Name cannot be null or empty.", nameof(name)); } var dropdown = new TagBuilder("select") { Attributes = { { "name", fullName }, { "data-val", "true" }, { "data-val-required", "Mandatory field." }, { "data-val-number", "The field must be a number." } } }; dropdown.MergeAttributes(htmlAttributes); dropdown.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata)); var options = new StringBuilder(); if (!string.IsNullOrEmpty(optionLabel)) { options.Append($ "<option value=''>{optionLabel}</option>"); } foreach (var item in list) { options.Append(CreateOption(item)); } dropdown.InnerHtml = options.ToString(); return MvcHtmlString.Create(dropdown.ToString(TagRenderMode.Normal)); } private static string CreateOption(CustomSelectItem item) { var disabledAttribute = item.Disabled ? "disabled" : string.Empty; var selectedAttribute = item.Selected ? "selected" : string.Empty; return $"<option value='{item.Value}' class='{item.Class}' {disabledAttribute} {selectedAttribute}>{item.Text}</option>"; } }
刚刚使用分页列表插件将分页添加到我的视图中,我只能将一页的数据带回。如果您单击“下一步”或任何其他可用页码,页面将重新提交...
我正在使用WebGrid,我需要使用Ajax 在页面之间切换。 索引代码 <p>我正在使用 <pre><code>WebGrid</code></pre>,我需要使用 Ajax 在页面之间切换。</p> <p><strong>索引代码</strong></p> <pre><code><script src="../../Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> <script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> @using (Ajax.BeginForm("GetGrid", new AjaxOptions() { UpdateTargetId = "Res" })) { <input type="text" /> <input type="submit" value="start" /> <div id="Res"> </div> } </code></pre> <p><strong>结果部分视图</strong></p> <pre><code>@model IEnumerable<MvcApplication1.Controllers.Model> <div id="grid2"> @{ var grid = new WebGrid(source:Model,rowsPerPage:6,ajaxUpdateContainerId: "grid2"); @grid.GetHtml(htmlAttributes: new { id = "grid2" }, columns: grid.Columns( grid.Column("Someting") )); } </div> </code></pre> <p><strong>控制器代码</strong></p> <pre><code> public class ABCController : Controller { // // GET: /ABC/ public ActionResult Index() { return View(); } public static List<Model> mo = new List<Model>(); [HttpPost] public ActionResult GetGrid() { for (int i = 0; i < 1000; i++) { mo.Add(new Model() { Someting = i.ToString() }); } return PartialView("Result", mo); } } public class Model { public string Someting { get; set; } } </code></pre> <p>这适用于首页,但其他页面没有任何反应。</p> </question> <answer tick="true" vote="1"> <p>几个小时后,我找不到一些对我有帮助的东西。我注意到我的页面链接的 html 代码。 页面链接 </p> <pre><code><a href="#" onclick="$('#grid2').load('/ABC/GetGrid?page=2&amp;__=635163360142144025 #grid2');">2</a> </code></pre> <p>所以我终于明白了它是如何工作的。我向我的控制器添加了一个<pre><code>ActioResult</code></pre>,如下所示:</p> <pre><code> [HttpGet] public ActionResult GetGrid(int page) { return PartialView("Result",mo); } </code></pre> <p>并且有效。我希望这对某些人有帮助</p> </answer> </body></html>
我想为网络网格自动生成行号,我可以使用下面的代码来做到这一点 grid.Column(标题:“行号”,格式:item => item.WebGrid.Rows.IndexOf(item) + 1), 问题...
我必须在MVC4中实现分页而不需要回发。我已经实现了带有回发的分页。 公共 ActionResult 索引(int? page) { var model = 来自 db.Country 中的 r ...
我想使用分页列表在我的视图中对数据进行分页,我之前使用网络网格完成了此操作,但发现使用模型优先方法很难做到这一点。任何帮助都会很大
我想用 Razor 在 MVC3 上实现分页和排序功能。 是否有任何内置功能?或者需要手动执行。 有人有这方面的文章吗
我正在开发 asp.net mvc3 应用程序,并且有许多来自数据库的记录。我想先只显示 10 条记录,然后用户可以单击按钮查看接下来的 10 条记录,依此类推...喜欢
所以使用 EF4 我创建了一个脚手架控制器/视图,所以我的问题是如何以简单/快速的方式将分页添加到我的视图? 这 控制器生成 公共ViewResult索引() {
我在我的应用程序中设置了简单的分页系统,该系统使用 nerddinner 教程中的想法,使用分页列表类: 公共类分页列表:列表 { 噗...
我如何嵌套 WebGrid,并为每列设置大量格式。我可以做一个嵌套的 for 循环,但我基本上需要它来进行分页。或者还有其他更好的选择吗?