问题
我正在使用带有自定义列的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。
尝试
FormCollection form
添加到上述方法(仅包含提交按钮)@
带<text>
标记)重新构建此列。没有运气。选项
Html.ActionLink
之类的其他控件)感谢大家的时间!
答案 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快速准确的回复!