Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 那里';s no@Html.Button!_.net_Asp.net Mvc 3_Razor_Html Helper_Htmlbutton - Fatal编程技术网

.net 那里';s no@Html.Button!

.net 那里';s no@Html.Button!,.net,asp.net-mvc-3,razor,html-helper,htmlbutton,.net,Asp.net Mvc 3,Razor,Html Helper,Htmlbutton,这很奇怪。我看到了对@Html.Button()的引用,但当我键入Intellisense时,却找不到这样的帮助程序。。。有下拉列表、隐藏、编辑器等等,但没有按钮 这是怎么回事?Razor似乎没有“按钮”HTML帮助程序。您可能会找到对自定义HTML帮助程序扩展的引用 请参见此处:自mvc预览3(不是mvc3)起,没有按钮帮助程序 过去曾多次提及,例如: 然而,滚动您自己的是微不足道的-我在这里的某个地方有一个基础,我必须将其挖掘出来,但本质上只是创建一个新的Html.button,并从Html

这很奇怪。我看到了对@Html.Button()的引用,但当我键入Intellisense时,却找不到这样的帮助程序。。。有下拉列表、隐藏、编辑器等等,但没有按钮


这是怎么回事?

Razor似乎没有“按钮”HTML帮助程序。您可能会找到对自定义HTML帮助程序扩展的引用


请参见此处:

自mvc预览3(不是mvc3)起,没有按钮帮助程序

过去曾多次提及,例如: 然而,滚动您自己的是微不足道的-我在这里的某个地方有一个基础,我必须将其挖掘出来,但本质上只是创建一个新的Html.button,并从Html.LabelFor复制源代码,并更改输出以创建一个input type=“button”标记。

公共静态类HtmlButtonExtension
{
公共静态MvcHtmlString按钮(此HtmlHelper帮助程序,
字符串innerHtml,
对象(属性)
{ 
返回按钮(helper、innerHtml、,
HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
); 
}
公共静态MvcHtmlString按钮(此HtmlHelper帮助程序,
字符串innerHtml,
I词典(赠品)
{
var builder=新标记生成器(“按钮”);
builder.InnerHtml=InnerHtml;
builder.MergeAttributes(HtmlatAttributes);
返回MvcHtmlString.Create(builder.ToString());
}
}
展开,以便可以将“提交”按钮绑定到模型属性,但具有不同的文本:

@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })
使用以下命令:

//
///通过https://stackoverflow.com/questions/5955571/theres-no-html-button
/// 
公共静态类HtmlButtonExtension
{
公共静态MvcHtmlString按钮(此HtmlHelper、对象innerHtml、对象htmlAttributes)
{
返回helper.Button(innerHtml,HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}
公共静态MvcHtmlString按钮(此HtmlHelper帮助程序、对象innerHtml、IDictionary htmlAttributes)
{
var builder=new TagBuilder(“按钮”){InnerHtml=InnerHtml.ToString()};
builder.MergeAttributes(HtmlatAttributes);
返回MvcHtmlString.Create(builder.ToString());
}
公共静态MvcHtmlString按钮(此HtmlHelper html,
表达式属性,
对象innerHtml,
对象(属性)
{
//懒洋洋地基于TextAreaFor
var attrs=HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
var name=ExpressionHelper.GetExpressionText(属性);
var metadata=modelmetada.FromLambdaExpression(属性,html.ViewData);
字符串fullName=html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(名称);
模型状态模型状态;
if(html.ViewData.ModelState.TryGetValue(全名,out ModelState)&&ModelState.Errors.Count>0)
{
如果(!attrs.ContainsKey(“class”))attrs[“class”]=string.Empty;
属性[“类”]+=“”+HtmlHelper.ValidationInputCssClassName;
attrs[“class”]=attrs[“class”].ToString().Trim();
}
var validation=html.getUnobtrusiveValidationAttribute(名称、元数据);
if(null!=验证)foreach(验证中的变量v)attrs.Add(v.Key,v.Value);
字符串值;
if(modelState!=null&&modelState.Value!=null)
{
value=modelState.value.AttemptedValue;
}
else if(metadata.Model!=null)
{
value=metadata.Model.ToString();
}
其他的
{
value=String.Empty;
}
属性[“名称”]=名称;
属性[“值”]=值;
返回html.Button(innerHtml,attrs);
}
}

MVC5,引导版本3.2.0

@Html.ActionLink
(
链接文本:“删除”,
actionName:“索引”,
routeValues:null,//或者传递一些值->routeValues:new{id=1},
htmlAttributes:new{@class=“btn btn success btn sm glyphicon glyphicon remove”}
)

这将生成一个看起来像按钮的链接。

您在哪里看到这样的引用?我理解一致性的愿望,但实际上不需要一致性(没有任何编码或保护),因此只需编写一个html标记:'@html.button(“myButton”,new{@class=“myClass”})'vs'myButton'@Russel-我不同意-我已经在MvcHtmlString上创建了扩展方法来禁用、使其成为只读和隐藏DOM元素。因为没有按钮的HTML帮助程序,我无法使用扩展方法。说“没有必要”有点短视,可能很幼稚。这不是很奇怪吗?特别是如果它是琐碎的,为什么不完整地包含它呢?我已经通读了那个文档,但我不能让它工作。我已经将我的助手放在项目根目录下一个名为HtmlHelpers.cs的文件中,它包含一个静态类HtmlHelpers,带有一个公共静态方法,该方法返回一个字符串,该字符串的唯一参数是“this HtmlHelper helper”。一切都已编译,.按钮应以Intellisense显示,但它不。。。我还应该做什么?您是否在视图的顶部包含了扩展名称空间的import语句?这是这里常见的问题。您可能希望确保视图可编译(右键单击project,选择unload。右键单击可编辑文件-将MvcBuildViews设置为true。保存并关闭,右键单击并重新加载project并再次编译。创建名为extensions的文件夹。在其中添加htmlextensions.cs类(确保命名空间正确)然后在您的视图中使用:@使用您的应用程序。如果您有问题,扩展还可以使用记事本启用MvcBuildViews。Ekkis,不确定您对项目做了什么,但y
@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })
/// <summary>
/// Via https://stackoverflow.com/questions/5955571/theres-no-html-button
/// </summary>
public static class HtmlButtonExtension
{

    public static MvcHtmlString Button(this HtmlHelper helper, object innerHtml, object htmlAttributes)
    {
        return helper.Button(innerHtml, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }

    public static MvcHtmlString Button(this HtmlHelper helper, object innerHtml, IDictionary<string, object> htmlAttributes)
    {
        var builder = new TagBuilder("button") { InnerHtml = innerHtml.ToString() };
        builder.MergeAttributes(htmlAttributes);
        return MvcHtmlString.Create(builder.ToString());
    }

    public static MvcHtmlString ButtonFor<TModel, TField>(this HtmlHelper<TModel> html,
                                                        Expression<Func<TModel, TField>> property,
                                                        object innerHtml,
                                                        object htmlAttributes)
    {
        // lazily based on TextAreaFor

        var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);

        var name = ExpressionHelper.GetExpressionText(property);
        var metadata = ModelMetadata.FromLambdaExpression(property, html.ViewData);

        string fullName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);

        ModelState modelState;
        if (html.ViewData.ModelState.TryGetValue(fullName, out modelState) && modelState.Errors.Count > 0)
        {
            if( !attrs.ContainsKey("class") ) attrs["class"] = string.Empty;
            attrs["class"] += " " + HtmlHelper.ValidationInputCssClassName;
            attrs["class"] = attrs["class"].ToString().Trim();
        }
        var validation = html.GetUnobtrusiveValidationAttributes(name, metadata);
        if(null != validation) foreach(var v in validation) attrs.Add(v.Key, v.Value);

        string value;
        if (modelState != null && modelState.Value != null)
        {
            value = modelState.Value.AttemptedValue;
        }
        else if (metadata.Model != null)
        {
            value = metadata.Model.ToString();
        }
        else
        {
            value = String.Empty;
        }

        attrs["name"] = name;
        attrs["Value"] = value;
        return html.Button(innerHtml, attrs);
    }
}