假设我有一堂课
public class ItemController:Controller
{
public ActionResult Login(int id)
{
return View("Hi", id);
}
}
Run Code Online (Sandbox Code Playgroud)
在不在Item文件夹中的页面上ItemController
,我想创建一个指向该Login
方法的链接.那么Html.ActionLink
我应该使用哪种方法以及我应该传递哪些参数?
具体来说,我正在寻找替代方法
Html.ActionLink(article.Title,
new { controller = "Articles", action = "Details",
id = article.ArticleID })
Run Code Online (Sandbox Code Playgroud)
已经在最近的ASP.NET MVC化身中退役了.
默认链接颜色为蓝色.如何删除html超链接标记的默认链接颜色<a>
?
简单的问题是,如果您使用ASP.NET MVC Framework 1中的Html Helper,则很容易在文本框上设置默认值,因为存在过载Html.TextBox(string name, object value)
.当我尝试使用Html.TextBoxFor方法时,我的第一个猜测是尝试以下哪些不起作用:
<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>
Run Code Online (Sandbox Code Playgroud)
我现在应该坚持使用Html.TextBox(字符串,对象)吗?
例如@Html.ActionLink()
,ASP.NET MVC可以使用HTML Helpers生成HTML元素,@Html.BeginForm()
依此类推.
我知道我可以通过创建一个匿名对象来指定表单属性,并将该对象传递给(在本例中为第四个)htmlAttributes
参数,其中id
为元素指定一个:
Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"})
Run Code Online (Sandbox Code Playgroud)
但class
属性怎么样?显然这不起作用:
Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"})
Run Code Online (Sandbox Code Playgroud)
因为在请求我的视图时,它只会抛出随机语法错误,因为它在遇到C#关键字后需要其他东西class
.
我也尝试过:
new { _class = "myclass"}
Run Code Online (Sandbox Code Playgroud)
和
new { class_ = "myclass"}
Run Code Online (Sandbox Code Playgroud)
但它们也没有用,因为下划线被短划线取代.
我知道我也可以手工编写HTML元素或将表单包装在一个内部<div class="myClass">
,但我仍然有兴趣知道它应该如何完成.
通常在ASP.NET视图中,可以使用以下函数来获取URL(而不是a <a>
):
Url.Action("Action", "Controller");
Run Code Online (Sandbox Code Playgroud)
但是,我无法从自定义HTML帮助程序中找到如何执行此操作.我有
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
Run Code Online (Sandbox Code Playgroud)
辅助变量具有Action和GenerateLink方法,但它们生成了<a>
.我在ASP.NET MVC源代码中做了一些挖掘,但我找不到一种简单的方法.
问题是上面的Url是视图类的成员,并且对于它的实例化,它需要一些上下文和路由映射(我不想处理它,我不应该这样做).或者,HtmlHelper类的实例也有一些上下文,我假设它是Url实例的上下文信息子集的晚餐(但我不想再处理它).
总而言之,我认为这是可能的,但是由于我可以看到的所有方式,涉及一些或多或少的内部ASP.NET内容的操作,我想知道是否有更好的方法.
编辑:例如,我看到的一种可能性是:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不对.我不想自己处理UrlHelper的实例.必须有一个更简单的方法.
Dunno如果在PR或Beta中发生这种情况,但如果我创建了一个扩展方法HtmlHelper
,则在Razor驱动的页面中无法识别:
namespace SomeNamespace.Extensions {
public static class HtmlExtensions {
public static string Foo(this HtmlHelper html) {
return "Foo";
}
}
}
Run Code Online (Sandbox Code Playgroud)
我把它添加到以下<Namespaces>
部分Web.config
:
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<!-- snip -->
<add namespace="SomeNamespace.Extensions"/>
</namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)
但是在尝试查看页面时会抛出编译错误:
@Html.Foo()
Run Code Online (Sandbox Code Playgroud)
如果我使用WebForms重新创建页面,它可以正常工作.这是怎么回事?
解决方法
如果我@using SomeNamespace.Extensions
在我的Razor视图中包含它,那么它可以工作,但我更愿意将它包含在内Web.config
有HTMLHelper
文件上传吗?具体来说,我正在寻找替代
<input type="file"/>
Run Code Online (Sandbox Code Playgroud)
使用ASP.NET MVC HTMLHelper.
或者,如果我使用
using (Html.BeginForm())
Run Code Online (Sandbox Code Playgroud)
什么是文件上传的HTML控件?
[为css类的HTMLHelper属性启用intellisense]
我有这个HTMLhelper:
public IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> propertyExpression,
string cssClass)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我希望Resharper在传递"cssClass"参数的值时为我的应用程序中定义的CSS类提供IntelliSense.
Resharper可以识别一些代码注释属性,但没有一个与将方法参数标记为CSS类直接相关.
我能找到的最接近的是[HtmlAttributeValue(字符串名称)].我试着像这样申请cssClass参数:
public IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> propertyExpression,
[HtmlAttributeValue("class")] string cssClass)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.如果Resharper能够识别输入的类并且停止在jQuery选择器表达式中操作未知的CSS类(在上面的帮助器生成的文本框上操作),这也将是非常棒的.
编辑: 这是一个智能感知的屏幕截图,它适用于动作方法的"htmlAttributes"参数.这是通过在参数上使用[HtmlElementAttributes]注释来完成的.
我想要一个类似的注释,让我把css类放在一个字符串参数中,并让相同的intellisense出现在css类中.
我认为标题几乎总结了:
ASP.NET MVC RouteLink()
和ActionLink()
ASP.NET MVC有什么区别?
即你何时使用Html.RouteLink()
,何时Html.ActionLink()
在你的视图中使用?
如何使用Razor视图引擎在ASP.NET MVC3中创建只读文本框?是否有HTMLHelper方法可以做到这一点?
像这样的东西?
__CODE__
html-helper ×10
asp.net-mvc ×6
c# ×4
razor ×4
.net ×2
actionlink ×2
anchor ×1
css ×1
file-upload ×1
html ×1
intellisense ×1
resharper ×1
routelink ×1
upload ×1
url ×1