Asp.net mvc 3 单击按钮时将参数从视图传递到控制器
我已经创建了自己的扩展,如下所示:Asp.net mvc 3 单击按钮时将参数从视图传递到控制器,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我已经创建了自己的扩展,如下所示: public static MvcHtmlString hSearch(this HtmlHelper helper, string labelName, string labelCaption, string textName, string textValue, string tableName, string buttonId, string actionName, string controllerName, object route
public static MvcHtmlString hSearch(this HtmlHelper helper, string labelName, string labelCaption, string textName, string textValue, string tableName, string buttonId,
string actionName, string controllerName, object routeValues, object htmlAttributes)
{
var textbuilder = new TagBuilder("input");
textbuilder.MergeAttribute("id", textName);
textbuilder.MergeAttribute("name", textName);
textbuilder.MergeAttribute("value", textValue);
textbuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
ModelMetadata metadata = ModelMetadata.FromStringExpression(labelName, helper.ViewData);
String innerText = labelCaption ?? (metadata.DisplayName ?? (metadata.PropertyName ?? labelName.Split('.').Last()));
if (String.IsNullOrEmpty(innerText))
{
return MvcHtmlString.Empty;
}
TagBuilder labelbuilder = new TagBuilder("label");
labelbuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(labelName)));
labelbuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
labelbuilder.SetInnerText(innerText);
//return new MvcHtmlString(textbuilder.ToString());
var buttonBuilder = new TagBuilder("button");
buttonBuilder.MergeAttribute("id", buttonId);
buttonBuilder.SetInnerText(buttonId);
var formBuilder = new TagBuilder("form");
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
formBuilder.Attributes.Add("action", urlHelper.Action(actionName, controllerName, routeValues));
formBuilder.Attributes.Add("method", "Post");
formBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
formBuilder.InnerHtml = labelbuilder.ToString() + textbuilder.ToString() + buttonBuilder.ToString();
return new MvcHtmlString(formBuilder.ToString());
}
我将视图中的扩展用作:
@Html.hSearch("lblSrch", "Company", "companyName", (string)TempData["cName"], "CHComp", "Search", "Fetch", "Home", null, null)
现在我想在单击按钮时将tableName传递给控制器。。我的控制器如下所示:
public ActionResult Fetch(string search, string tablename)
{
var c = cbo.fetchData(search, tablename);
return PartialView(c.ToList());
}
正在等待答复。。谢谢。您还没有给我们您的助手的代码,但据猜测它会写出一个标签、一个文本字段(textName)和一个按钮。如果是这种情况,它将通过HTTP将/get
companyName=someValue
发送回控制器
如果字段是从视图动态发送的,则通常需要向控制器添加FormCollection
。或者,为什么不将文本搜索输入的名称保持为静态,例如将绑定到同名控制器参数的name=“search”
编辑
您可以在一个隐藏字段中将tableName传递回控制器(
//codes
对我们没有帮助。该方法显然是您的大部分代码..您可以将其显示给我们吗(hSearch即..)我已经更新了代码。hSearch
实际上做了什么?你说的是什么按钮?Fetch
action返回的是什么视图?这是一个非常庞大的代码,可以用最少的努力将它放进一个PartialView中(并且可以重用).您之所以创建HtmlHelper而不是部分视图,是因为什么原因吗?我只是想创建它来搜索数据库中不同表中的数据,以便在所有程序中重复使用此代码..我不想将搜索值发送给控制器,而是想将文本框值加上表名发送给有一次我点击了按钮。你能给我一个更好的建议吗?我的视图中只有一个标签、一个文本框和一个按钮。。