2016-07-15 30 views
0

我通過我的模型使用Html.Actionlink顯示我的模型數據

@Html.ActionLink("download", "action", "controller", Model, null) 

但它產生的HTML

<a href="/secure/action/controller?PrivateNo=3123123&amp;LastName=lastname ..... >download</a> 

因此,如果用戶將改變一些事情會影響到傳遞參數的ActionLink並且會有嚴重的漏洞。我怎樣才能避免這種情況?


在評論中提問我提供了有關控制器的更多詳細信息。

public ActionResult List(MyModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      bla bla bla 

      MyModel myModel = new MyModel() 
      { 
       PrivateNo = PrivateNumber, 
       FirstName = FirstName, 
       ... 
      }; 


      ... 
     } 

     ... 
    } 

,並鑑於我有

@Html.ActionLink("download", "GenerateDoc", "controller", Model, null) 

和它去生成PDF

public ActionResult GenerateDoc(MyModel pdfModel) 
    { 
     string pdfData = FillTemplate(pdfModel); 
     byte[] source = Encoding.UTF8.GetBytes(pdfData); 
     byte[] resultDoc = Convert(source, "Template.xml"); 

     return File(resultDoc, "application/pdf", Server.UrlEncode("test.pdf")); 
    } 
+0

爲什麼要在鏈接中傳遞模型? –

+0

@StephenMuecke否則我該如何使用參數調用動作?我需要從另一個行動生成和下載PDF。 'public ActionResult GenerateDoc(Model pdfModel)' – gsiradze

+0

通常的做法是發送模型的ID(並且根據您的模型,這可能會失敗 - 您可能會超出查詢字符串限制並拋出異常,或者它該模型的屬性是複雜的對象或集合,綁定將失敗) –

回答

-1

請使用form方法在你的代碼,請參考下面的代碼實現這個動作: 在.cshtml/View頁面上,你必須輸入hidden字段(如果你不想在頁面上顯示這些屬性,它可以等)爲TextBoxesProperties像下面Ø工作):後

[HttpPost] 
    public ActionResult Index(MyModel model) 
    { 
     return View(); 
    } 

你會得到controller所有值:

@using(Html.BeginForm("Index","Home",FormMethod.Post)) 
{ 
    @Html.HiddenFor(x=>x.PrivateNo) 
    @Html.HiddenFor(x=>x.FirstName) 
    @Html.HiddenFor(x=>x.LastName) 
<input type="submit" name="Submit" title="Submit" value="Submit" /> 
} 

Controller您可以通過下面的代碼得到這些值

見下:

Controller

View Page

,你可以看到我們已經得到了來自鑑於valuescontroller並沒有parameterURL所示。

希望它可以幫助你.. :)

感謝。

快樂編碼:)

+0

OP想要轉到一個返回FileResult的方法,這是行不通的(更不用說,惡意用戶可以像隱藏輸入的值一樣容易地更改它的值鏈接中的url) –

+0

您好先生,我想OP不想在URL中顯示參數信息。 我的帖子僅限於此。 –

+0

它沒有意義發表一個與OP的問題無關的答案。 –

相關問題