2017-09-04 73 views
0

我必須將模型傳遞給Controller中的Action,並且還需要傳遞字符串。將模型從視圖傳遞到具有附加字符串的控制器

類似的東西:

<a class="btn" title="Send" href="@Url.Action("Check","Approve",Model && new{redirectTo = "ShowPDF")">Send</a> 

是沒有辦法做到這一點(對我來說更好的辦法)還是必須增加價值Model.Redirect「onclick」事件,以及如何做到這一點? (沒曾想辦法)

我的解決辦法:

<a class="btn" title="Send" href="@Url.Action("Check","Approve",new { ID =Model.ID,EAN =Model.ID_EAN, ic = Model.invoiceNumber, s = Model.supplier, a = Model.amount, d = Model.dueDate, redirect = "ShowPDF" })">Send</a> 

我就是這麼做的,但對我來說這種方式是在模型的變化非常複雜。

檢查措施:

public ActionResult Check(string ic, string s, decimal a, DateTime d, int ID, string EAN, string redirect = "Index") 
     { 
      ... 
      return RedirectToAction(redirect); 

     } 
+0

你的'Check'動作方法是怎樣的? – Shyju

+0

[如何將參數從@ Url.Action傳遞給asp.net mvc3中的控制器函數](https://stackoverflow.com/questions/13017513/how-to-pass-parameter-from-url-action- to-controller-function-in-asp-net-mvc3) – Munzer

回答

1

如果你想發送你的模型只有幾個屬性,它是好的跟隨你的解決方案。但是,如果你想發送一個模型的很多屬性,請記住允許攜帶多少數據查詢字符串的限制(因瀏覽器而異)。

相反,您應該在表單中發送數據。如果你想通過表單發送一些數據,它應該是一個表單元素。你可以創建一個輸入elemenet或隱藏輸入元素

@using(Html.BeginForm("check","approve")) 
{ 
    @Html.HiddenFor(p=>p.ID_EAN) 
    @Html.HiddenFor(p=>p.ID) 
    <!-- Add a hidden element for other properties you want to send --> 
    <input type="hidden" name="redirect" value="ShowPDF" /> 
    <inpu type="submit" /> 
} 

,您還可以使用相同的視圖模型作爲您HttpPost操作方法的帕拉姆

[HttpPost] 
public ActionResult Check(YourModel model,string redirect) 
{ 
    // to do : Return something 
} 

可是......

如果您沒有更改視圖中的任何值,則不需要發送整個表單。只需發送實體(主鍵)和HttpPost操作方法的唯一Id值,使用該唯一Id,獲取完整的實體(查詢數據庫)並使用它。請記住,你永遠不要相信來自客戶端(瀏覽器)的價值。爲此,您可以使用您的解決方案,因爲您只發送2個值,所以不需要表格。

+0

非常感謝:)你明確告訴我吧! –

相關問題