gpt4 book ai didi

c# - 创建 MVC 删除按钮扩展 - 如何扩展 MVC 的 Html 助手?

转载 作者:太空狗 更新时间:2023-10-29 23:17:41 27 4
gpt4 key购买 nike

ASP.NET MVC 2 呈现一个链接(即 <a> )以删除记录。

允许通过 GET 操作执行删除操作可能有害,因此我想通过发出 POST 来执行删除操作。

我创建了以下代码:

<% using (Html.BeginForm("Delete", "Boodschap", new { id = item.BoodschapID }))
{ %>
<button>Delete</button>
<% } %>

现在我想将此代码作为扩展方法添加到 Html 帮助器中:

public static MvcForm DeleteButton(this HtmlHelper helper, string name, 
string actionName, string controllerName, string routeValues)
{
MvcForm form = helper.BeginForm(actionName, controllerName, routeValues);
return form;
}

现在这里是我卡住的地方。如何让这个删除按钮起作用?

最佳答案

如果你想生成完整的代码,让它返回一个 MvcForm 就错了。您想让它返回一个 MvcHtmlString 并在该方法中构造 HTML。这样您就可以将其用作:

@Html.DeleteButton( "Delete", "Boodschap", new { id = item.BoodschapID } );

直接生成 HTML(注意:未经测试,您可能需要适当的空检查等)

public static MvcHtmlString DeleteButton( this HtmlHelper helper, string name, 
string actionName, object htmlAttributes )
{
return DeleteButton( helper, name, actionName, null, null, htmlAttributes );
}

public static MvcHtmlString DeleteButton( this HtmlHelper helper, string name,
string actionName, string controllerName, object routeValues,
object htmlAttributes )
{
var buttonBuilder = new TagBuilder("button");
buttonBuilder.SetInnerText( name );

var formBuilder = new TagBuilder("form");
var urlHelper = new UrlHelper( helper.ViewContext.RequestContext );
formBuilder.Attributes.Add( "action", urlHelper.Action(
actionName, controllerName, routeValues ) )
formBuilder.Attributes.Add( "method", FormMethod.Post );
formBuilder.MergeAttributes( new RouteValueDictionary( htmlAttributes ) );
formBuilder.InnerHtml = buttonBuilder.ToString();

return new MvcHtmlString( formBuilder.ToString() );
}

另一种方法是重用表单助手和 Response.Write,但让方法返回一个(空)字符串,可能类似于:

public static MvcHtmlString DeleteButton(this HtmlHelper helper, string name, string actionName, object routeValues)
{
return DeleteButton(helper, name, actionName, null, routeValues, null);
}

public static MvcHtmlString DeleteButton(this HtmlHelper helper, string name, string actionName, string controllerName, object routeValues, object htmlAttributes)
{
using (helper.BeginForm(actionName, controllerName, routeValues, FormMethod.Post, htmlAttributes))
{
var response = helper.ViewContext.HttpContext.Response;
var builder = new TagBuilder("button");
builder.SetInnerText(name);
response.Write(builder.ToString(TagRenderMode.Normal));
}
return MvcHtmlString.Create("");
}

关于c# - 创建 MVC 删除按钮扩展 - 如何扩展 MVC 的 Html 助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8105420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com