将数据从视图传递到控制器问题

时间:2012-07-26 14:55:01

标签: jquery asp.net-mvc

我的表格定义如下。

<% using (Html.BeginForm("PRoll", "Payroll", FormMethod.Post, new { @id = "frmPRoll" })){%>

    <%= Html.TextBoxFor(model => model.keyid, new { @class = "required", Style = "width:190px", @maxlength = "15" })%>
    ....
<% } %>

和控制器

public ActionResult Index(int? id)
{
    var bo = new PayrollInfo();
    return View(bo);
}

[HttpPost]
public ActionResult DetailPage(string keyid)
{
    //TempData["prid"] = p_payrollid;
    return RedirectToAction("PayDtl/" + keyid, "Payroll", keyid);
}

我通过jquery提交表单如下

function DetailPage() {
    var rol = $('#keyid').val();
    $('#frmPRoll').attr('action', '/Proll/DetailPage/'+rol).submit();
}

控制器中的keyid值DetailPage操作方法总是为null。它永远不会从视图中填充实际数据。

如何从控制器中的视图中获取keyid值?

感谢

2 个答案:

答案 0 :(得分:2)

function DetailPage() {
    // TODO: don't hardcode /Proll/DetailPage here: use url helpers
    $('#frmPRoll').attr('action', '/Proll/DetailPage').submit();
}

由于此表单中已有一个包含keyid值的文本框,因此当您将表单提交到DetailPage操作时,此值将作为keyid操作参数进行发布。

此外,您正在使用RedirectToAction方法的错误重载。它应该是这样的,当然假设您的PayDtl期望一个名为keyid的参数:

[HttpPost]
public ActionResult DetailPage(string keyid)
{
    return RedirectToAction("PayDtl", "Payroll", new { keyid = keyid });
}

答案 1 :(得分:0)

试试这个

function DetailPage() {
    var rol = $('#keyid').val();
    $.ajax({
            type: "POST",
            url: '@Url.Action("DetailPage", "Proll")',
            data: "keyid=" + rol
            success: function (result) {
            ...
    });
});