0

我想要在SelectDaycshtml页面呈现查看页面ViewByDay.cshtml的员工详细信息。概念是从下拉列表中选择一周中的几天,并在ViewByDay中检索与当天相关的信息。为了做到这一点,我在SelectDay中使用了@Html.RenderAction("ViewByDay")。但是我得到这个错误如何在C#MVC5中查看动作?

过程或函数'ViewByDay'期望参数'@Days',它没有提供。

这是我的视图类的代码段和控制器:

SelectDay.cshtml

@model CrudMvc.Models.EmpInfoModels 
@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    <div class="form-horizontal"> 
     <h4>Select Employee By Days</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Days, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownListFor(model => model.Days, (List <SelectListItem>)ViewBag.DayItems, new { @class = "form-control" }) 

       @Html.ValidationMessageFor(model => model.Days, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Select" class="btn btn-default" /> 
     </div> 
    </div> 
} 

<div> 
    @{ Html.RenderAction("ViewByDay"); } 
    // @{ Html.RenderPartial("_ViewByDay");} 
    // @Html.Partial("_ViewByDay") 
    // @Html.ActionLink("Get All Employee Details", "GetAllEmpDetails","Employee") *@ 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

ViewByDay.cshtml

@model IList<CrudMvc.Models.EmpInfoModels> 
<div> 
    <h4>ListEmpByDays</h4> 
    <hr /> 
    <table class="table"> 
     <tr> 
      <th>Employee Name</th> 
      <th>Day</th> 
      <th>Destination</th> 
     </tr> 
     @foreach (var item in Model) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => item.EmpName)</td> 
       <td>@Html.DisplayFor(modelItem => item.Days)</td> 
       <td>@Html.DisplayFor(modelItem => item.Destination)</td> 
      </tr> 
     } 
    </table> 
</div> 
<p>@Html.ActionLink("Back to List", "GetAllEmpDetails")</p> 

控制器硒lectDay和ViewByDay

public ActionResult SelectDay() 
{ 
    var days= new List<SelectListItem>(); 
    days.Add(new SelectListItem { Text = "Monday", Value = "Monday" }); 
    days.Add(new SelectListItem { Text = "Tuesday", Value = "Tuesday" }); 
    days.Add(new SelectListItem { Text = "Wednesday", Value = "Wednesday" }); 
    days.Add(new SelectListItem { Text = "Thursday", Value = "Thursday" }); 
    days.Add(new SelectListItem { Text = "Friday", Value = "Friday" }); 
    ViewBag.DayItems = days; 
    return View(); 
} 

[HttpPost] 
public ActionResult SelectDay(string Days) 
{   
    return RedirectToAction("ViewByDay", new {Days = Days}); 
} 

public ActionResult ViewByDay(string days) 
{ 
    EmpRepository EmpRepo = new EmpRepository(); 
    ModelState.Clear(); 
    var emps = EmpRepo.ViewByDay(days); 
    return View(emps); 
} 
+0

删除'@ {Html.RenderAction( “ViewByDay”); }'from'SelectDay.cshtml' - 你有一个表单,并发布'Days'的值,然后重定向到'ViewByDay'方法/视图。注意:'ViewByDay()'方法中'ModelState.Clear();'是毫无意义的(ModelState中没有任何东西可以清除) –

+1

您的代码没有意义,如果要在第一个view,然后你需要一个带有FormMethod.Get的窗体,'SelectDay()'方法需要'Days'的一个参数(并且你需要返回模型),但是使用ajax会得到更好的性能根据选定的选项更新DOM –

+0

亲爱的朋友,我建议你阅读部分视图,然后在ViewByDay和SelectDay中使用相同的局部视图,否则我认为Stefan Kert答案是正确的。 –

回答

1

您需要提供displayDays作为参数

@Html.Action("ViewByDays", "Controllername", new {days="5"}) 

大概帕拉姆天应该是一个整数。

你已经在你的方法正确SelectDay称之为

[HttpPost] 
public ActionResult SelectDay(string Days) 
{   
    return RedirectToAction("ViewByDay", new {Days = Days}); 
}