2017-08-17 121 views
2

我不完全理解的剃刀語法所以這是我的問題的一部分,但我也覺得沒有用,我怎麼想這樣做一個邏輯問題,在C#中的功能來運行代碼。獲取提交按鈕使用MVC 5

當我點擊下載我剛剛獲得「資源不能找到」

下面是從視圖我的代碼。

<td> 
     @Html.ActionLink("Edit", "Edit", new { id=item.cusName }) | 
     @Html.ActionLink("Details", "Details", new { id=item.cusName }) | 
     @Html.ActionLink("Delete", "Delete", new { id=item.cusName }) 


     <br /> 

    @using (Html.BeginForm("Download", "RMAFormModelsController", FormMethod.Post, new { id = "Download" })) 
    { 
     <div id="convertAboutPageButtonDiv"> 
      <input type="submit" value="Download to Excel File" /> 
     </div> 
    } 
    <br /> 

    </td> 

下面是來自C#函數的代碼。

//Export to excel 
     [HttpPost] 
     public ActionResult Download() 
     { 

      List<Lookup> lookupList = new List<Lookup>(); 
      var grid = new System.Web.UI.WebControls.GridView(); 

      grid.DataSource = lookupList; 
      grid.DataBind(); 

      Response.ClearContent(); 
      Response.AddHeader("content-disposition", "attachment; filename=YourFileName.xlsx"); 
      Response.ContentType = "application/vnd.ms-excel"; 
      StringWriter sw = new StringWriter(); 
      HtmlTextWriter htw = new HtmlTextWriter(sw); 
      grid.RenderControl(htw); 
      Response.Write(sw.ToString()); 
      Response.End(); 

      return View(); 
     } 

這一切似乎應該工作。我在想什麼 - 理解?

+0

它似乎想要_RMAFormModels_無控制器部分,沒有argiment _id =「下載」 _通過下載方法 – Steve

+0

預期如果我理解你糾正你的說法。因爲我沒有爭論,我應該試着直接引用模型?我認爲視圖必須與控制器通信並從模型中獲取信息?感謝您的快速響應和您的幫助。 –

回答

3

更新RMAFormModels代替RMAFormModelsController的形式的HTML幫手。

@using (Html.BeginForm("Download", "RMAFormModels", FormMethod.Post)) 
    { 
     <div id="convertAboutPageButtonDiv"> 
      <input type="submit" value="Download to Excel File" /> 
     </div> 
    } 
+0

謝謝你這麼多的工作!你介意解釋它爲什麼起作用嗎?如何調用模型允許我在控制器中運行該功能? –

+0

@JonathanGreene語法形式是Html.BeginForm(ActionName,控制器名稱,方法類型)..所以,如果你的控制器的名字就像是abccontroller,那麼你需要提及的表單中的ABC。 –

1

@Jonathan,你在你的代碼中有兩個問題。首先,您不必在html.beginform()中使用完整的控制器名稱。從表單中刪除RMAFormModelsController並僅添加RMAFormModels。

@using (Html.BeginForm("Download", "RMAFormModels", FormMethod.Post, new { id = "Download" }))) 
    { 
     <div id="convertAboutPageButtonDiv"> 
      <input type="submit" value="Download to Excel File" /> 
     </div> 
    } 

並在您的beginform中創建了新的{id =「Download」}。所以爲了按預期工作,你的控制器中必須有一個名爲id的參數。

[HttpPost] 
     public ActionResult Download(string id) 
     { 
     } 

否則,您可以使用@Power答案,因爲他從html.beginform中刪除了新的{id =「Download」}。

謝謝。