【问题标题】:Submitting form using controller method使用控制器方法提交表单
【发布时间】:2014-04-12 12:43:01
【问题描述】:

我试图从视图中调用一个方法,但它不起作用! :(

我的控制器代码:

public class ProfessionalController : Controller
{
    //
    // GET: /Professional/
    public ActionResult Index()
    {
        return View();
    }


    public ActionResult Sum(int nro1, int nro2)
    {
        var value = nro1 + nro2;

        ViewBag.SumResult = value;

        return View();
    }
}

我的观点代码:

专业指数:

@{
    ViewBag.Title = "Profissional";
}

<h2>Profissional</h2>


@using (Html.BeginForm("Professional", "Sum")) {

    <input id="nro1" type="number" class="form-control marged_top" placeholder="Numero 1" />
    <input id="nro2" type="number" class="form-control marged_top" placeholder="Numero 2" />


    <button id="Sum" name="Sum" value="Sum" class="btn btn-default" type="button"
            data-toggle="button">

        Sum
    </button>

}

汇总视图:

@{
    ViewBag.Title = "Sum";
}

<h2>Sum</h2>


@ViewBag.SumResult;

没有发生任何错误,当我点击 Sum 按钮时没有任何反应。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-controller


    【解决方案1】:

    一些问题:

    • 你可能希望你的&lt;button&gt;type="submit",否则表单将不会被提交,并且按钮将什么也不做。另见:MDN - Button Type
    • Html.BeginForm("Professional", "Sum") 应该是 Html.BeginForm("Sum", "Professional") - 控制器是第二个参数。
      Html.BeginForm("Sum") 也可以在这里工作,因为这是当前控制器。
    • 输入应该有name="nro1",而不是id - 这是正在提交的名称。
    • @ViewBag.SumResult 之后不需要分号(尽管这不是错误)。
    • 我不确定data-toggle="button" 在这里做什么。

    请注意,您不是“从视图中调用控制器”——您正在提交一个表单,它启动了一个新的控制器-视图循环。 Html.Action 可以做类似的事情,但这不是你在这里想要做的。

    我也借此机会建议不要改用ViewBag - Use a strongly typed view model

    【讨论】:

    • 我已经把类型改成了submit,但是还是不行:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多