MVC5 Form get 隱藏空值傳遞參數

在開發Asp.Net Mvc Web專案時,有時需要一些不顯示參數跟著form get,大部分使用 Hidden input處理

而這些參數空值時怎樣不傳遞到後端,讓URL不會一堆空值參數

繼續翻寫專案大業中

需要處理一些特殊的form get傳遞參數的處理

有一些參數在空值時不需要跟著form一起傳遞,當然這參數也是不顯示在畫面中參數

這些參數是在進入頁面時就已經決定了,當然可以用前端的解法但是要寫一堆判斷

所以使用MVC中有的helper來當解決方案,當然也許有更好的解法觀迎指教

public static IHtmlString HiddenNullNotGen(this HtmlHelper helper, string name, string value)
{
    if (string.IsNullOrWhiteSpace(value))
    {
        return new MvcHtmlString(null);
    }
    return helper.Hidden(name, value);
}

額外補充一下 不想到處都要參考擴充的helper的話,可以在View中的Web.config增加參考這樣在野面上就可以直接使用

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />    
        <add namespace="XXXXX.Helpers" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

上方範例中的XXXXX.Helpers,XXXX是專案名,Helpers是自訂擴充Helper的資料夾

接著在頁面上怎樣使用呢

@using (Html.BeginForm("Action", "Controller", FormMethod.Get))
{
    <div>
        <div>
            <input id="aaa" name="aaa" type="text" value="">
        </div>
        <div>
            <button type="submit">Search</button>
        </div>
    </div>
    @Html.HiddenNullNotGen("xxx", Model.xxx)
}

當有傳遞對應的參數時,隱藏的input才會產生在畫面上,不會出現一堆參數明明都沒有卻一狗票都在上面,url會相對的乾淨許多

謝謝收看!