2012-08-14 96 views
0

我創造我自己的分機爲:從視圖參數傳遞到控制器時,單擊按鈕

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) 

現在我想通過表名時我點擊按鈕到控制器..我的控制器看起來像這樣:

public ActionResult Fetch(string search, string tablename) 
    { 
     var c = cbo.fetchData(search, tablename); 
     return PartialView(c.ToList()); 
    } 

等待回覆..謝謝..

+1

'// codes'不能幫助我們。這種方法顯然是你的代碼的大部分..你可以顯示給我們(hSearch是..) – 2012-08-14 04:33:09

+0

我已經更新了代碼.. – 2012-08-14 04:36:14

+0

'hSearch'實際上做了什麼?你在說什麼按鈕? 「Fetch」操作返回什麼視圖? – Mohayemin 2012-08-14 04:39:43

回答

1

你沒有給我們你的幫手的代碼,但猜測它寫出了一個標籤,一個文本字段(textName)和一個按鈕。如果是這種情況,它會通過HTTP將companyName=someValue發送回控制器。

如果從視圖動態發送字段,通常需要將FormCollection添加到控制器。或者,爲什麼不保持文本搜索輸入的名稱是靜態的,例如name="search",它將綁定到您的控制器的同名參數。

編輯 可以傳遞的tablename回控制器在一個隱藏字段(<input type='hidden' name='tableName' value='{tableNameGoesHere}'

但是按照上面,搜索字符串將有業者名稱,模型綁定不同的是不會承認它爲string search

+0

我更新了代碼。 – 2012-08-14 04:41:21

+0

我不想將搜索值發送給控制器,而是希望在單擊按鈕時將文本框值和表名稱發送到控制器。你能否建議我一個更好的方法..我認爲我所看到的是一個標籤,一個文本框和一個按鈕.. – 2012-08-14 04:48:28

+0

謝謝你的建議..我認爲它會工作.. – 2012-08-14 04:52:26

相關問題