2011-07-10 24 views
0

私はASP.NET MVC Razor Partial View(CSHTML)に変換する必要があるHTMLフォームをいくつか持っています。具体的には、それぞれを@ Html.TextBoxに変換する必要があります。例えば、HTMLto 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パーサを使っていると思っていましたが、私はRegexの神ではなく、パースするコンポーネントに慣れていません。

どのような提案も大歓迎です!

+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"); 
関連する問題