ASP.NET MVC - 窗体上的多个按钮

时间:2009-04-04 02:47:21

标签: asp.net-mvc

我想在此表单上有多个按钮作为图像:

<% Html.BeginForm("Create", "Foos", FormMethod.Post); %>

    <!-- html form elements -->
    <%=Html.SubmitImage("Button", "save-button.gif", new { alt = "Save" })%>

<% Html.EndForm(); %>

我正在阅读有关Html.ActionImage但我没有在Microsoft.Web.Mvc中看到它,我想它已被删除,是否有其他添加按钮的方式?

我想在一个表单上保存,删除,发布,取消等按钮作为图像,最好每个按钮在控制器中调用自己的动作。

2 个答案:

答案 0 :(得分:1)

你可以使用好的html:

<input type="button" name="CancelButton" id="CancelButton" value="Cancel" />

<button name="CancelButton" id="CancelButton">Cancel</button>

或其中一名助手

<%= Html.Button("CancelButton", "Cancel", "MyJavascriptFunction()") %>

在任何情况下,您可能需要编写一些小的javascript,除非您只是想使用链接取消。

这是帮助者的一点blog entry

答案 1 :(得分:0)

当然,一种选择是为每个按钮分别设置表格。没有Javascript或格式错误的HTML,这通常是不可能或不容易的。这很容易让您将每个请求发送到不同的操作方法。

这是我为多个图像提交按钮提出的解决方案。我对此并不是特别高兴,但它有效,如果在框架中内置了替代方案,可以在以后轻松重构。

在您的HTML中

<%= Html.SubmitImage("Dog", "~/images/dog.jpg")%>
<%= Html.SubmitImage("Cat", "~/images/cat.jpg")%>

在表单的控制器操作方法中:

(这是一种行动方法。由您来决定如何实施每个按钮)

    public ActionResult Index(FormCollection form)
    {
        // get the name of the button that was clicked (sent via either Dog.x or Cat.x since its an image button)
        var buttonName = form.GetSubmitButtonName();

        if (buttonName == "Remove" || buttonName == "Skip")
        {
           Remove(form);
        }
        else if (buttonName == "Add")
        {
           Add(form);
        }
     }

扩展方法:

(这会找到一个名为Remove.x或Skip.x或Add.x的表单参数,并剥离.x部分)

public static class FormCollectionExtensions
{
    public static string GetSubmitButtonName(this FormCollection formCollection)
    {
        var button = formCollection.Keys.OfType<string>().Where(x => x.EndsWith(".x")).SingleOrDefault();

        // we got something like AddToCart.x
        if (button != null)
        {
            return button.Substring(0, button.Length - 2);
        }

        throw new ApplicationException("No image button found");
    }
}

注意:另一种方法是使用CSS将背景图像放在常规的Html.SubmitButton按钮类型(常规HTML按钮而不是HTML图像按钮)上,但由于不同而我没有找到令人满意的不同浏览器的行为方式(see this question)。