0

我正在尝试将下拉列表中的值作为参数传递给控制器​​方法。以下代码不起作用:

@using (Html.BeginForm())
{  
    <fieldset>
        <legend>Submit</legend>
        <div class="editor-field">
            @Html.DropDownListFor(m => m.ClientId, new SelectList(Model.Clients, "ClientId", "Name"))
            @Html.ValidationMessageFor(model => model.ClientId)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

简而言之,这是我的控制器方法:

[HttpPost]
        public ActionResult SaveInvoice(string ClientId)
        {
//some code here
return RedirectToAction("SaveInvoice/Complete", new { id = invoice.InvoiceId });
        }

当我单击表单上的提交时,控制器方法不会触发。没有在数据库中创建发票,没有重定向到“完成”。我在这方面很菜鸟,所以如果你有时间,请仔细解释我需要做什么。这个控制器触发然后重定向是非常重要的。谢谢你们。

4

2 回答 2

2

问题可能是您没有在 Html.BeginForm 中指定正确的控制器。尝试显式添加操作和控制器。(我不知道你的控制器的名字所以我发明了一些东西,请填写正确的值)

@using (Html.BeginForm("SaveInvoice", "yourControllerName"))
{  
    <fieldset>
        <legend>Submit</legend>
        <div class="editor-field">
            @Html.DropDownListFor(m => m.ClientId, new SelectList(Model.Clients, "ClientId", "Name"))
            @Html.ValidationMessageFor(model => model.ClientId)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

另一种可能性是您的验证正在阻止提交表单。检查您的数据是否有效(或暂时删除验证器)

于 2013-05-06T21:33:43.847 回答
1

这是假设您的所有路由设置正确。在视图上使用无参数Html.BeginForm()时,您将发布到与加载相同的操作。我猜你SaveInvoice的动作不是你加载页面的同一个动作的重载。

尝试重载您用于加载 HTML 表单的操作,或使用类似Html.BeginForm("SaveInvoice", "{controller name here}").

于 2013-05-06T21:33:14.627 回答