我已经构建了一个自定义Html Helper扩展,如下所示:
public static string DatePicker(this HtmlHelper helper, string name, string value)
{
return string.Format(@"<script type='text/javascript'>
$(document).ready(function(){{
$('#{0}').datepicker({{
changeMonth: true,
changeYear:true,
dateFormat: 'd-M-yy',
firstDay: 1, showButtonPanel:
true,
showWeek: true
}});
}});
</script>
<input type='text' name='{0}' id='{0}' value='{1}'>", name, value);
}
Run Code Online (Sandbox Code Playgroud)
问题是,现在需要页面"包含"以下内容:
<script src="/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.ui.datepicker.min.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
以及其他一些项目.问题如下:
如果我要在每个页面中包含这些项目(例如在Site.Master中),是否存在严重的处理开销,从而否定了HtmlHelper组织"包含"的需要 - 考虑到最终会有大约20个包括整个站点中使用的所有不同类型的jQuery UI小部件.
如果HtmlHelper对"includes"进行排序,则每次使用此DatePicker时它将添加一个(通常页面上有两个)是否有人有办法确定用户是否已经在同一类型的控件上页面,因此当使用DatePicker的多个实例(例如)时,不会重新包含相同的jquery库?
只是想知道这两者之间的区别是什么,当我在HtmlHelper中构建表时,它们中的一个或另一个的好处是什么
HtmlTable table = new HtmlTable();
Run Code Online (Sandbox Code Playgroud)
和:
TagBuilder table = new TagBuilder("table");
Run Code Online (Sandbox Code Playgroud)
这和这个问题大致相同,
为什么使用TagBuilder而不是StringBuilder?
但我更想知道这两者之间的区别.
我为WebFormViewEngine视图编写了一个非常漂亮的菜单Html帮助器.这个引擎允许你的助手返回void,仍然可以使用:
@Html.Theseus
Run Code Online (Sandbox Code Playgroud)
这对我的助手很有用,因为它可以使用HtmlTextWriter渲染菜单,直接渲染到输出流.
但是,在Razor视图中,Html助手应该返回一个值(通常是MvcHtmlString),这是添加到输出中的值.差异小,后果大.
有一种解决方法,正如GvS指出的那样(参见ASP.NET MVC 2到MVC 3:Razor中的自定义Html助手)如下:
如果帮助程序返回void,请执行以下操作:
@{Html.Theseus;}
Run Code Online (Sandbox Code Playgroud)
(基本上,您只是调用方法,而不是渲染到视图中).
虽然仍然很整洁,但这与@ Html.seus不完全相同.所以...
我的代码很复杂,但效果很好,所以不愿意进行主要编辑,即用另一个编写器替换HtmlTextWriter.一段代码如下:
writer.AddAttribute(HtmlTextWriterAttribute.Href, n.Url);
writer.AddAttribute(HtmlTextWriterAttribute.Title, n.Description);
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.WriteEncodedText(n.Title);
writer.RenderEndTag();
// Recursion, if any
// Snip off the recursion at this level if specified by depth
// Use a negative value for depth if you want to render the entire sitemap from the starting node
if ((currentDepth < depth) || (depth < 0))
{
if (hasChildNodes)
{
// Recursive building starts here
// Open new ul …Run Code Online (Sandbox Code Playgroud) 我有
echo $this->Form->input('birthdate', array( 'label' => __('Geburtsdatum', true)
, 'dateFormat' => 'DMY'
, 'minYear' => date('Y') - 70
, 'maxYear' => date('Y') - 10 ));
Run Code Online (Sandbox Code Playgroud)
在模型中,我将生日设定为日期.现在Cakephp吐出三个选择框,我绝对喜欢.但它也吐出两个丑陋的破折号/连字符,我想摆脱它.
SELECTBOX - SELECTBOX - SELECTBOX
有什么建议?
我已经看到了一些类似的问题,但它们似乎是旧版本的MVC,我没有运气如何将它们应用到MVC3.
基本上我已经编写了一个很好的小htmlhelper,它将显示当前模型的一个选定参数,就像我@Html.DisplayFor()一样,除了我的旁边有一个编辑按钮(原谅这些例子中没有样式!):

当单击此按钮时,它将执行其中一个"弹出窗口",其中显示编辑器字段,并使用一些简单的jquery使页面的其余部分显示为灰色:

这是我的帮手:
public static HtmlString PopUpEditorFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, bool textarea = false)
{
string id = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var Display = new TagBuilder("span");
Display.MergeAttribute("class", "Display");
Display.InnerHtml = metadata.Model.ToString();
var Edit_Button = new TagBuilder("span");
Edit_Button.MergeAttribute("class", "Edit_Button");
Edit_Button.InnerHtml = " Edit";// change to use resources file
var Display_Container = new TagBuilder("div");
Display_Container.MergeAttribute("class", "Display");
Display_Container.InnerHtml = Display.ToString(TagRenderMode.Normal) + Edit_Button.ToString(TagRenderMode.Normal);
var legend = new TagBuilder("legend");
legend.InnerHtml = "Edit " + metadata.DisplayName ?? …Run Code Online (Sandbox Code Playgroud) 使用:ASP .NET MVC 4在我的一个页面中我需要一个具有一定宽度和高度的textarea使用html helper类.我的一些代码如下:
<div class="editor-label">
@Html.LabelFor(model => model.MailSubject)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MailSubject)
@Html.ValidationMessageFor(model => model.MailSubject)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MailBody)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MailBody)
@Html.ValidationMessageFor(model => model.MailBody)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Content)
</div>
<div class="editor-field1">
@Html.EditorFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
</div>
Run Code Online (Sandbox Code Playgroud)
我想知道如何定义editorfor(model.content)的大小(宽度/隐藏)?
我想创造这样的东西
<A href="#section2">Section Two</A>
Run Code Online (Sandbox Code Playgroud)
使用ASP.Net MVC的Html.Helper.怎么做?
我的视图模型中有一个可以为null的布尔属性:
public class ViewModel
{
[Required(ErrorMessage="Please select yes or no")]
public bool? Completed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望此属性的表单控件是一对单选按钮,在页面加载时最初没有选择任何选项.这是因为我们希望用户有意识地单击一个选项或另一个选项(而不是复选框,这很容易被忽略并保留为默认值).
布尔属性需要是可空的,因为否则在页面加载时已经检查了'NO'选项,正如我上面提到的那样,这不是我们想要的.但是,在视图中使用以下代码:
<label>@Html.RadioButton("Completed", Model.Completed) YES</label>
<label>@Html.RadioButton("Completed", !Model.Completed) NO</label>
Run Code Online (Sandbox Code Playgroud)
导致运行时错误,因为帮助程序尝试绑定到的模型属性为null.
我怎样才能实现这个最初未被选中的状态?
任何人都可以告诉我如何只读取一个复选框而不是禁用?对于文本框,我这样使用它
@Html.TextBoxFor(m => m.FirstName, new { id = "fName", @readonly="readonly" })
Run Code Online (Sandbox Code Playgroud)
现在,我有一个复选框和这样的单选按钮
@Html.CheckBoxFor(m => m.Iseighteen, new { id = "18", @disabled = "disabled" })
@Html.RadioButtonFor(m => m.isMale, new { id = "male",@disabled = "disabled" })
Run Code Online (Sandbox Code Playgroud)
禁用的问题是我无法在禁用的字段中获得焦点,而我可以在只读中获得焦点.如果我选项卡然后它选择只读字段,以便屏幕阅读器可以读取它,但如果它被禁用,那么它会跳过所有禁用的内容并转到页脚.我尝试使用readonly复选框和收音机,但它不起作用,让用户编辑.那么,有什么建议吗?
本文介绍如何创建扩展方法HtmlHelper<dynamic>,但它似乎不适用于MVC6(我将HtmlHelper更改为IHtmlHelper).
错误是:
'IHtmlHelper<PagedList<Tag>>' does not contain a definition for 'CustomSelectList' and the best extension method overload 'HtmlHelperExtensions.CustomSelectList<Tag>(IHtmlHelper<dynamic>, string, IEnumerable<Tag>, Func<Tag, string>, Func<Tag, string>)' requires a receiver of type 'IHtmlHelper<dynamic>'
Run Code Online (Sandbox Code Playgroud)
这是如何在MVC6中完成的?
html-helper ×10
asp.net-mvc ×4
c# ×3
razor ×2
anchor ×1
asp.net ×1
asp.net-core ×1
cakephp ×1
date ×1
include ×1
input ×1
jquery ×1
textarea ×1
validation ×1