2011-07-10 101 views
0

我有幾十個HTML表單需要轉換爲ASP.NET MVC Razor部分視圖(CSHTML)。具體來說,我需要將每個轉換爲@ Html.TextBox。例如,轉換將HTML轉換爲CSHTML的最佳方法

<input name="text1" style="margin:0pt"></input> 

@Html.TextBox("text1", String.Empty, new { style = "margin:0pt" }) 

,然後將文件保存到一個新CSHTML文件。當然,輸入標籤可以被編碼爲

<input .../> or as <input ...></input> 

和標籤可能會或可能不會有一個樣式屬性。

任何人都知道自動化的方式,我可以做到這一點?另一種方法是手動進行更改,這將會非常耗時。我在想一些正則表達式魔法會是要走的路,或者可能使用某種HTML DOM解析器,但我並不是一個正則表達式的神,我不熟悉任何有助於解析的組件。

任何建議將不勝感激!

+1

爲什麼你認爲表單元素需要在所有的轉換? – Guffa

+0

@Guffa說什麼,你有特別需要轉換它們嗎?您可以按原樣使用它們。 – rkaregaran

+0

是的,他們需要轉換,因爲我會做一些服務器端自動填充的值。 – goombaloon

回答

0

這將幫助你,

private static void ReplaceInputTagsWithHtmlTextBox(string filePath) 
    { 
     var input = System.IO.File.ReadAllText(filePath); 
     var keyValueRegex = new Regex("\\s*(?<key>[^=]*)=\\s*['\"](?<value>[^'\"]*)['\"]"); 
     var values = new List<string>(); 
     var regex = new Regex(@"<input (?<Attributes>[^>]*)>(</input>)?"); 
     var newContent = regex.Replace(input, m => 
     { 
      var keyValueDict = new Dictionary<string, string>(); 
      var allAttributes = m.Groups["Attributes"].Value; 
      keyValueRegex.Replace(m.Groups["Attributes"].Value, mm => 
      { 
       keyValueDict.Add(mm.Groups["key"].Value, mm.Groups["value"].Value); 
       return null; 
      }); 
      var keyValues = new StringBuilder(); 
      foreach (KeyValuePair<string, string> pair in keyValueDict) 
      { 
       if (!pair.Key.Equals("id", StringComparison.OrdinalIgnoreCase) && !pair.Key.Equals("name", StringComparison.OrdinalIgnoreCase) && !pair.Key.Equals("value", StringComparison.OrdinalIgnoreCase))//don't include id, name and value 
        keyValues.Append(pair.Key.Replace("class", "@class") + "= \"" + pair.Value + "\", "); 
      } 
      var keyValuesString = keyValues.ToString(); 
      if (keyValuesString.EndsWith(", ")) 
       keyValuesString = keyValuesString.Remove(keyValuesString.Length - 2, 2); 
      if (!keyValueDict.ContainsKey("name") || keyValueDict["name"] == null) 
       keyValueDict["name"] = ""; 
      if (!keyValueDict.ContainsKey("value") || keyValueDict["value"] == null) 
       keyValueDict["value"] = ""; 
      return String.Format("@Html.TextBox(\"{0}\", \"{1}\", new {{ {2} }})\n", keyValueDict["name"], keyValueDict["value"], keyValuesString); 
     }); 
     using (StreamWriter outfile =new StreamWriter(filePath)) 
     { 
      outfile.Write(newContent); 
     } 
    } 

現在強制它採用打電話,

ReplaceInputTagsWithHtmlTextBox("Temp.cshtml"); 
相關問題