2013-11-15 72 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”属性中获取所选值。 –