2013-11-15 71 views

回答

0

最後,我通過將參數描述爲隱藏輸入來找到解決方案。我不確定是否有一個更優雅的方法來將視圖中的參數傳遞給控制器​​。非常感謝你的好樣品。我也標記爲有幫助的所有答覆。這是我最後的代碼對於那些誰可能會遇到類似的問題:


ApplicantViewModel:

public class ApplicantViewModel 
{ 
    public IEnumerable<Applicant> Applicants { get; set; } 

    //Codes for Dropdownlist values 
    public string SelectedValue { get; set; } 
    public IEnumerable<SelectListItem> Values 
    { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "pdf", Text = "Pdf" }, 
       new SelectListItem { Value = "excel", Text = "Excel" }, 
       new SelectListItem { Value = "word", Text = "Word" } 
      }; 
     } 
    } 
} 


ApplicantController:

public ViewResult Reporting() 
{ 
    var model = new ApplicantViewModel(); 
    return View(model); 
} 

public ActionResult RenderReport(string SelectedValue, string name, string fileName, string dataSource, string table, string filter) 
{ 
    //Codes for rendering report 
    ... 
} 


Reporting.cshtml:

@model MyProject.Models.ApplicantViewModel 

@using (Html.BeginForm("RenderReport", "Applicant", FormMethod.Post, 
new { enctype = "multipart/form-data" })) 
{ 
<div> 
    @Html.DropDownListFor(model => model.SelectedValue, Model.Values, "-- select an option --") 

    <input type="hidden" name="name" value="Report1"/> 
    <input type="hidden" name="fileName" value="image rapor"/> 
    <input type="hidden" name="dataSource" value="ApplicantDataset"/> 
    <input type="hidden" name="table" value="ApplicantsView"/> 
    <input type="hidden" name="filter" value="David"/> 

    <input type="submit" value="submit" /> 
</div> 
} 
9

與往常一樣,你可以用一個視圖模型開始:

public class MyViewModel 
{ 
    public string SelectedValue { get; set; } 
    public IEnumerable<SelectListItem> Values 
    { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "1", Text = "Item 1" }, 
       new SelectListItem { Value = "2", Text = "Item 2" }, 
       new SelectListItem { Value = "3", Text = "Item 3" }, 
      }; 
     } 
    } 
} 

然後控制器:

public ActionResult Index() 
{ 
    var model = new MyViewModel(); 
    return View(model); 
} 

最後一個觀點:

@model MyViewModel 
@Html.DropDownListFor(x => x.SelectedValue, Model.Values) 

對於您可以使用一些枚舉在那裏的很多帖子說明了自定義助手。這裏有一篇博客文章說明這樣的幫​​手:http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc-creating-a-dropdownlist-helper-for-enums.aspx

+0

感謝您的答覆。我會嘗試並告知你結果。我只是想知道; 1)如果我用Student實體使用這些值,我也會將這個實體添加到同一個ViewModel。真的嗎? 2)如果我在同一張剃鬚刀上使用兩個上拉列表(例如Yes/No值),那麼我是否需要創建另一個SelectListItem?或者它也可以在同一張Razor頁面上用於不同的Dropdownlist? - –

+0

我測試了這個好方法。但問題是:我無法將SelectedValue傳遞給控制器​​。我怎樣才能用這種方法做到這一點? –

+1

您的HttpPost控制器操作可以將視圖模型作爲參數,然後您將自動在「SelectedValue」屬性中獲取所選值。 –