我有参数发送像
@Html.Action("actionName", "controlName", new{ pName1 = "pValue1", ... })
但是,pName1 = "pValue1", ...将来自控制器的ViewBag.应该用ViewBag封装的对象类型,以及如何将路由值设置为Html.Action?
我有一个自定义的HtmlHelper扩展,它根据teh帮助器输入参数呈现控件.
我处于这样的情况,我能够渲染任何控件,除了CheckBox.当CheckBoxFor助手接受时,Expression<Func<TModel, bool>>
我需要一种方法将Func的返回类型转换为bool,如标题中所述.
如何添加mailto链接到MVC Html.Actionlink Helper?
@foreach (var item in Model) {
<tr>
<td>
@{ var email = "mailto:" + item.user.Firstname + "@testmail.org";}
@Html.ActionLink(item.user.Fullname, email)
</td>
Run Code Online (Sandbox Code Playgroud)
只在我的浏览器中创建一个如下所示的链接: http:// localhost:53371/Open/mailto%3amail%40testmail.org
我希望在我自己的程序集中编写一些帮助程序,模仿System.web.mvc中的帮助程序.我的问题是我无法使用对Tagbuilder.ToMvcHtlString的调用,因为它是内部的.因此,如果我返回一个字符串,它就不会为asp.net 4做好准备.
我不想添加任何东西到system.web.mvc,因为这是一个给定的DLL.
码:
<% foreach (var item in Model) { %>
<td>
<%= Html.Encode(item.BirthDate) %>
</td>
<% } %>
Run Code Online (Sandbox Code Playgroud)
显示:8/24/2009 12:00:00 AM但我只需要日期(2009年8月24日).可以在控制器动作中不进行任何格式化
这是我的查看代码:
@using(Html.BeginForm(new { SelectedId = /*SelectedValue of DropDown*/ })) {
<fieldset>
<dl>
<dt>
@Html.Label(Model.Category)
</dt>
<dd>
@Html.DropDownListFor(model => Model.Category, CategoryList)
</dd>
</dl>
</fieldset>
<input type="submit" value="Search" />
}
Run Code Online (Sandbox Code Playgroud)
如图所示,我需要将dropdown所选值传递给BeginForm()Html帮助器中的操作.你的建议是什么?
我正在尝试构建组合标记:
第一个标签:<span class="requiredInidicator">* </span>
第二个标签:( <label>SomeText</label>为简洁而剪裁的属性)
我想结合这些来返回一个MVCHtmlString,但下面的代码完全忽略了span.有人能指出我做错了什么
这是我的代码:
// Create the Label
var tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("id", "required" + id);
//I get the id earlier fyi - not pertinent fyi for this question )
// Create the Span
var required = new TagBuilder("span");
required.AddCssClass("requiredInidicator");
required.SetInnerText("* ");
//Now combine the span's content with the label tag
tagBuilder.InnerHtml += required.ToString(TagRenderMode.Normal);
tagBuilder.SetInnerText(labelText);
var tag = MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
return tag;
Run Code Online (Sandbox Code Playgroud)
创建标记时,将完全忽略范围.当我在调试期间检查标签时,它并不关心我附加via所需的内容.InnerHtml+=
有什么明显的东西我做错了吗?
我应该坚持使用HTML帮助程序,还是只使用纯HTML?
我一直在使用HTML助手一段时间,非常喜欢使用它们.最近我开始使用诸如Twitter Bootstrap之类的CSS框架,我发现我的标记过于复杂而无法使用标准HTML帮助程序.
当然,我仍然使用Url.Action()生成链接,有时@Html.TextBoxFor()或类似的简单形式,但是,例如,我发现一些帮助者喜欢Html.ActionLink()或Using Html.BeginForm()只是不切割它.
我的标记通常包含复杂的巢.例如,在Bootstrap中,我可能想要添加一个图标作为链接的一部分:
<a href="#">
<i class="icon-user"></i>
<span>Simple link</span>
</a>
Run Code Online (Sandbox Code Playgroud)
这在Bootstrap中很常见,我觉得HTML助手会妨碍它.我可以自己做,但我的标记完全不同.
假设我只使用少量的HTML助手; 需要的地方.这提出了另一个问题:
如果我最小化HTML帮助程序的使用,我应该完全放弃它们并主要使用常规HTML来保持一致性吗?
我正在使用扩展方法在菜单上的活动链接上维护css类.
但是我遇到了htmlAttributes和对象值导致错误的问题.
我在Razor页面中有以下内容,但我不明白我是如何解析htmlAttributes的.
@Html.MenuLink("Summary", "Summary", "Graphs", null, new { @class = "dropdown-toggle caret", data_target = "#", data_toggle = "dropdown" })
Run Code Online (Sandbox Code Playgroud)
从查看HtmlHelper开始,该方法应该具有IDictionary<object, string>htmlAttributes的类型.新{ @class = "dropdown-toggle caret", data_target = "#", data_toggle = "dropdown" }语法对于字典来说并不常见,所以这是正确的吗?
显然我做错了,因为它返回了以下错误:
Argument 6: cannot convert from '<anonymous type: string class, string data_target, string data_toggle>' to 'System.Collections.Generic.IDictionary<object, string>'
Run Code Online (Sandbox Code Playgroud)
扩展方法我试图在下面工作:
public static MvcHtmlString MenuLink(this HtmlHelper htmlHelper, string text, string action, string controller, RouteValueDictionary routeValues, IDictionary<object, string> htmlAttributes)
{
var routeData = htmlHelper.ViewContext.RouteData.Values;
var currentController = …Run Code Online (Sandbox Code Playgroud)