具有表单的MVC Webgrid列不通过隐藏字段

时间:2017-10-18 19:32:22

标签: asp.net-mvc webgrid

问题

我正在使用带有自定义列的webgrid,该列具有带有一个隐藏字段和提交按钮的表单。查看HTML源代码,我看到隐藏字段有一个值。表单在控制器中提交并命中正确的HttpPost方法。问题是隐藏的字段不适合发布。

守则

以下是生成webgrid的代码:

WebGrid wgSearchResults = new WebGrid(
    source: Model.notes,
    rowsPerPage: 10,
    canPage: true,
    canSort: true
);

wgSearchResults.Pager(WebGridPagerModes.All, numericLinksCount: 10);

@wgSearchResults.GetHtml(
    htmlAttributes: new { id = "wgSearchResults" },
    mode: WebGridPagerModes.All,
    columns: wgSearchResults.Columns(
        wgSearchResults.Column(format: (item) =>
            {
                System.Text.StringBuilder html = new System.Text.StringBuilder();

                html.Append("<form action='/ManageData/ViewFacilities' method='post'>");
                html.Append("<input type='hidden' id='hidBusinessId_' value='" + item.businessId.ToString() + "' />");
                html.Append("<input type='submit' id='btnViewFacilities_" + item.ID.ToString() + "' name='btnSubmit_" + item.ID.ToString() + "' value='View Facilities' />");
                html.Append("</form>");

                return new HtmlString(html.ToString());
            }, 
        canSort: false
        ),
        wgSearchResults.Column(columnName: "note", header: Sorter("note", "Note", wgSearchResults), canSort: true)
    )
)

Model.notes结构是此类的实例列表:

public class SearchNotesResult
{
    public int ID { get; set;}
    public int businessId { get; set; }
    public string note { get; set; }
}

此按钮命中的控制器方法是:

[HttpPost]
public ActionResult ViewFacilities(string hidBusinessId)
{
    int businessId = 0;
    bool isValidNumber = false;

    isValidNumber = int.TryParse(hidBusinessId, out businessId);

    if (isValidNumber)
    {
        if (businessId > 0)
        {
            TempData["BusinessId"] = businessId;

            return RedirectToAction("GoHere");
        }
        else
            return RedirectToAction("DontGoHere");
    }
    else
    {
        return RedirectToAction("DontGoHere");
    }
}

在上面的方法中,hidBusinessId值为null。

尝试

  1. 将参数FormCollection form添加到上述方法(仅包含提交按钮)
  2. 使用Razor语法(@<text>标记)重新构建此列。没有运气。
  3. 研究几个小时。这就是我在这里的原因。
  4. 选项

    1. 将此帖子更改为Get(以及Html.ActionLink之类的其他控件)
    2. 将商家ID添加到按钮ID并在方法中解析
    3. 社区建议的任何其他人
    4. 感谢大家的时间!

1 个答案:

答案 0 :(得分:0)

多么令人难以置信的愚蠢错误......需要使用name属性而不是id。

html.Append("<form action='/ManageData/ViewFacilities' method='post'>");
html.Append("<input type='hidden' name='hidBusinessId' value='" + item.businessId.ToString() + "' />");
html.Append("<input type='submit' value='View Facilities' />");
html.Append("</form>");

尽管字符串数据类型有效(请参阅下面的评论)。谢谢Stephen快速准确的回复!