MVC中如何將後台封裝好的Web控制項發到前台視圖顯示

來源:互聯網
上載者:User

標籤:mvc   web   控制項   asp.net   html   


             最近在用MVC開發的時候,師姐說所有用到的控制項都要寫在後台,然後從後台發到前台,這樣就改變了以前把頁面做死了的缺點。但是在實現的時候,遇到了點兒問題,



          


           上面代碼寫了一個LinkButton,當調用這個靜態方法後,會產生一個LinkButton的HTML代碼,這個是比較簡單的元件,如果,現在我要拼接一個功能齊全的DataGridView控制項,要這個控制項有分頁欄,各種添加刪除功能,CSS樣式,為了複用我們的EasyUI元件庫,估計這個HTML代碼也得有半頁多吧。如果我要在每次遇到參數的時候都要截斷字元,而且還要為代碼裡面的引號添加轉義符,感覺挺麻煩的。那麼,有沒有一種不用截斷字元的方式呢?



            現在回想一下我們以前學習三層的時候是如何在D層避免SQL注入的,我們引入了參數來避免拼接字元。按照這個思路,我們也可以在字串裡面定義參數,然後真正調用的時候,再用參數替代掉預留位置。


                    在這裡,我們使用String的一個Replace方法,然後利用字串的替換,將參數傳入。



             下面來看下Demo:

                    


                 首先說明下,因為是為了做Demo,所以很多分層上的東西都被我簡化掉了,只求在邏輯上能實現。



                  下面是控制器類和產生簡單form的代碼:


                     需要仔細體會下replace方法,有沒有感覺到這是另一種變數賦值的運算式?


        

    public class TestController : Controller    {               //建立一個控制項的HTML代碼        public String ConvertSingleForm(String singleFormID, String SingleForm_table_ID, String method)//參數為formID,tableID,form的提交方式            //上面參數都是字串,用來取代html代碼中的屬性值        {            //建立控制項的HTML字串,其中,所有引號都用"代替;                    //用"代替有兩個原因:                        //1,在後面replace的時候進行轉換                        //2,"在html中是特殊字元,會被自動解析為引號            String htmlSingleForm = @" <form id="singleForm" method="post" ><table id="SingleForm_table_ID" bgcolor="00FF99"><tr>    <td>密碼</td>    <td>3455467547556634568568568643</td>    </tr><tr>    <td>密碼</td>    <td>3455467547556634568568568643</td>    </tr></table></form>";           htmlSingleForm = htmlSingleForm.Replace(""", "\"");   //轉換引號           htmlSingleForm = htmlSingleForm.Replace("singleForm", singleFormID);   //formID賦值           htmlSingleForm = htmlSingleForm.Replace("SingleForm_table_ID", SingleForm_table_ID);//tableID賦值           htmlSingleForm = htmlSingleForm.Replace("post", method);  //form提交方式賦值            return htmlSingleForm;//返回        }        public ActionResult Index()        {                             // ViewBag.form1 = htmlConvert.ConvertSingleForm("singleForm", "234", "post");           ViewBag.form1 = ConvertSingleForm("singleForm", "234", "post");//把一個form控制項裝入ViewBag中,然後傳到視圖           return View();        }    }



        當調用控制器中的index方法後,會返回Index視圖,下面是Index視圖中代碼:


   

 @if (ViewBag.form1!= null){    @Html.Raw(ViewBag.form1.ToString())  //解析成HTML代碼顯示在頁面上}

     利用html的Raw方法,將字元再解析成html代碼。




         在有了這個Demo後,我們只需把產生控制項的所有HTML代碼放到一個字串裡面,然後用Ctrl+f尋找到所有引號,將它替換成&quot,之後將做好的字元放到String或者StringBuilder中,在方法中寫好變數的替換就ok了。


              這樣,我們就將產生控制項的HTML代碼當做一個整體進行處理,而不必拆開它再拼接回來。


         這麼做雖然有好處,但也留下了隱患,這個以後再說。


       


            小結:思考無數種解決方案的過程比得到一個解決方案更有意思。


                       

           



                   

       

MVC中如何將後台封裝好的Web控制項發到前台視圖顯示

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.