标签: html-helper

如何在ASP.NET MVC 2.0中的视图外创建HtmlHelper?

我们正在将ASP.NET MVC 1.0应用程序升级到2.0版本,而某些代码需要使用需要HtmlHelper呈现的LinkExtensions.虽然我们知道某些代码没有正确地遵循MVC模型并且正在根据需要进行重新编码,但我们需要一些工作来实现应用程序的构建.

这是我们在ASP.NET MVC 1.0下工作的当前语法:

public static HtmlHelper GetHtmlHelper(ControllerContext context)
{
    return new HtmlHelper(new ViewContext(context,
                                          new WebFormView("HtmlHelperView"),
                                          new ViewDataDictionary(),
                                          new TempDataDictionary()),
                          new ViewPage());
}
Run Code Online (Sandbox Code Playgroud)

我们得到的错误如下:

错误1'System.Web.Mvc.ViewContext'不包含带有4个参数的构造函数

html-helper asp.net-mvc-2

4
推荐指数
1
解决办法
2682
查看次数

MVC HTML Helper自定义命名空间

我怎么能创建这样的东西:Html.MyApp.ActionLink()?谢谢.

.net asp.net asp.net-mvc html-helper

4
推荐指数
1
解决办法
2565
查看次数

使用Route Id值的ASP.NET MVC 3 Model Id

场景
路线:/ template/customize/10其中:10 =模板的ID()

在控制器中,模型是基于模板创建的,因此View的模型实际上是一个Customization()对象,实际上Id为0,因为它是新的.

在视图中我渲染@ Html.HiddenFor(m => m.Id)并且隐藏输入的结果值是10,尽管它应该是0,因为m是Customization类型.我之前使用MVC 2遇到过这种情况,并且通过不使用辅助方法解决了这个问题.

问题

  1. 是否有注释或我可以添加到Html Helper方法以实际呈现正确的值?

  2. 这是一个错误(MVC似乎将m.Id渲染为路径值,而不管控制器中实际模型的设置是什么)?

附加代码澄清

视图

@model Project.Core.Domain.Customization
@using( Html.BeginForm( "save", "customization" ) )
{
    @Html.HiddenFor( m => m.Id )
    @Html.HiddenFor( m => m.Template.Id )
    <button type="submit" id="save" name="save">Save</button>
}
Run Code Online (Sandbox Code Playgroud)

调节器

       public ActionResult Customize( int id )
    {
        var template = Persistence.Data.RetrieveObject<Template>( id );
        var model = new Customization();

        ViewBag.Template = template;
        return ( View( model ) );
    }
Run Code Online (Sandbox Code Playgroud)

将Action的签名更改为:

public ActionResult Customize( int TemplateId …
Run Code Online (Sandbox Code Playgroud)

.net asp.net asp.net-mvc html-helper asp.net-mvc-3

4
推荐指数
2
解决办法
3091
查看次数

Asp.Net MVC Razor FileUpload Html Helper进入现有View

我有一个View,我将产品添加到一个简单的WebStore.我希望一个产品有多个图像.这就是我使用Microsoft.Web.Helpers的FileUpload的原因.在我的View中使用FileUpload是这样的:

@FileUpload.GetHtml("Upload", 5, true, true, addText: "Add more", uploadText: "Upload files")
Run Code Online (Sandbox Code Playgroud)

然后我有一些其他产品属性的标签和字段,如下所示:

<div class="editor-field"><br>
    @Html.EditorFor(model => model.Title)<br>
    @Html.ValidationMessageFor(model => model.Title)<br>
</div>
Run Code Online (Sandbox Code Playgroud)

问题是当我使用post方法时,我的控制器没有得到任何东西.我使用这样的控制器:

[HttpPost]
public ActionResult Create(Product product, IEnumerable<HttpPostedFileBase> fileUpload)
{
    foreach (var file in fileUpload)
    {
        var fileName = Path.GetFileName(file.FileName);
    }

    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

那么有谁知道我做错了什么.因为我的FileUpload对象总是空的.

asp.net-mvc html-helper file-upload razor asp.net-mvc-3

4
推荐指数
2
解决办法
2万
查看次数

ASP.NET MVC中声明性HTML帮助程序和HTML帮助程序之间有什么区别?

在许多地方,您会听到开发人员谈论声明性HTML帮助程序HTML帮助程序.他们的区别是什么?他们只是同义词吗?

asp.net-mvc html-helper asp.net-mvc-3

4
推荐指数
1
解决办法
1054
查看次数

如何为Html.ActionLink(MVC3)合并htmlAttributes?

我将编写一个包装Html.ActionLink的简单助手,并为其添加一个类属性.目前它看起来像:

@helper MyActionLink(string text, string action, object routeValues, object htmlAttributes)
    {
    @Html.ActionLink(text, action, routeValues, new { @class = "MyClass" })
}
Run Code Online (Sandbox Code Playgroud)

它实际上添加了所需的@class属性,但忽略了所有传递的属性htmlAttributes.所以,如果像使用一样

@MyActionLink("Item1", "Edit", new { itemId = 1 }, new { @class = "class1" })
Run Code Online (Sandbox Code Playgroud)

它输出

<a class="MyClass" href="/Test/Edit?itemId=1">Item1</a>
Run Code Online (Sandbox Code Playgroud)

但我希望它有2个类: class="class1 MyClass"

如何合并这些htmlAttributes?

c# html-helper asp.net-mvc-3

4
推荐指数
1
解决办法
6023
查看次数

RouteValueDictionary和htmlAttributes之间是否存在冲突?

我使用RouteValueDictionary将RouteValues传递给ActionLink:

如果我编码:

<%:Html.ActionLink(SharedResources.Shared_Pagination_First, Model.ActionToExecute, Model.ControllerToExecute, Model.FirstRouteValues, null)%>
Run Code Online (Sandbox Code Playgroud)

链接结果是Ok:

SearchArticles?refSearch=2&exact=False&manufacturerId=5&modelId=3485&engineId=-1&vehicleTypeId=5313&familyId=100032&page=0
Run Code Online (Sandbox Code Playgroud)

但如果我编码:

<%: Html.ActionLink(SharedResources.Shared_Pagination_First, Model.ActionToExecute, Model.ControllerToExecute, Model.FirstRouteValues, new { @title = string.Format(SharedResources.Shared_Pagination_LinkTitle, 0) })%>
Run Code Online (Sandbox Code Playgroud)

链接结果是:

SearchArticles?Count=10&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D
Run Code Online (Sandbox Code Playgroud)

有什么问题?唯一的区别是,在最后我使用的是htmlAttributes

c# asp.net-mvc html-helper actionlink routevalues

4
推荐指数
1
解决办法
1656
查看次数

ASP.NET MVC 4自定义HTML Helpers文件夹位置

我开始使用带有Razor语法的ASP.NET MVC 4框架开发应用程序.我想知道我应该在哪里(文件夹位置)创建我的HTML Helper类.最佳实践.

例如:

  • VisualStudioSolution
    • Controlles
    • HTML
      • HtmlHelperClass.vb
    • 楷模
    • 查看

asp.net html-helper asp.net-mvc-4

4
推荐指数
1
解决办法
6462
查看次数

在MVC视图中,如果在表单标记中没有指定,则调用哪个控制器和方法?

我有一个继承的MVC项目.在视图上,BeginForm标记中没有指定路由(控制器和操作).视图呈现正确,因此我假设它正在选择默认路由.

我的问题是,如果没有指定路线,它是如何知道使用的路线?这里的最佳做法是:您是指定路线还是让它默认?

所以视图是Views/Config/WorkCodes.cshtml,标签是

Html.BeginForm()
Run Code Online (Sandbox Code Playgroud)

它进入控制器ConfigController.cs并调用操作WorkCodes().如果我正在做这个项目,我会写的

Html.BeginForm("WorkCodes", "Config", FormMethod.Post)
Run Code Online (Sandbox Code Playgroud)

MVC如何知道使用哪个控制器和操作而不指定它?

WorkCodes.cshtml

@{
  ViewBag.Title = "Work Codes";
}

@using (Html.BeginForm())
{
<div>
    <table style="width: 100%;" class="trHoverHighlight">
        <tbody>
            <tr>
                <td>
                    <br />
                    <div>
                        <button id="buttonCreateNew" type="button">Add New</button>&nbsp;
                        <button id="buttonReturn" type="button">Return</button>
                    </div>

                </td>
            </tr>
        </tbody>
    </table>
</div>
Run Code Online (Sandbox Code Playgroud)

}

ConfigController.cs

    public ActionResult WorkCodes()
    {
        return View(Rep.GetWorkAll(true));
    }
Run Code Online (Sandbox Code Playgroud)

这是从另一个视图中调用视图的位置:

                @foreach (var itm in (List<string>)ViewBag.ListObjects)
                {
                        <li>
                            <a href="../Config/@itm">Work Codes</a>
                        </li>  
                }
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc html-helper razor asp.net-mvc-4

4
推荐指数
1
解决办法
322
查看次数

带有4个参数的Ajax.BeginForm没有找到action方法

我有一个奇怪的案例,我想要你的启蒙.我有两个控制器.一般人员控制器使用行动方法和一个候选人控制器,用于与候选人相关的更具体的行动方法.我使用位于Person文件夹下的一个局部视图,以便在以后我想将其用于其他类型的Person时用作通用.目前,此局部视图使用针对候选控制器的Ajax.BeginForm.我正在使用的语法是

@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
    new AjaxOptions
    {
        HttpMethod = "Post",
        OnBegin = "onBeginFormValidation",
        OnSuccess = "onSaveCandidateLanguageSuccess"
    }))
{
    // form input elements
}
Run Code Online (Sandbox Code Playgroud)

这种类型的Ajax.BeginForm正常工作,尽管它针对不同控制器中的操作.现在我的表单验证我不得不为我的Ajax.BeginForm添加一些参数.我的新语法是这样的:

@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
    new AjaxOptions
    {
        HttpMethod = "Post",
        OnBegin = "onBeginFormValidation",
        OnSuccess = "onSaveCandidateLanguageSuccess"
    },
    new
    {
        id = "addEditCandidateLanguageForm",
        novalidate = "novalidate"
    }))
{
   // form input elements
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这种方式无法找到Action方法.如果我将我的动作放在Person Controller中,它会再次正常工作.但是我想知道为什么会这样.我做了一些挖掘,但我没有设法得到答案.

从firebug我看到浏览器试图发布的URL是出于某种原因

HTTP:// {项目名} /人/ SaveCandidateLanguage长度= 9

代替

HTTP:// {项目名} /候选/ SaveCandidateLanguage长度= 9

我自然得到404未找到的回复.我还想知道变量是什么?我在网址末尾看到的长度= 9,它来自何处.

c# asp.net-mvc html-helper ajax.beginform razor

4
推荐指数
1
解决办法
523
查看次数