2016-12-27 24 views
0

我正在创建一个MVC应用程序,我想在视图之间传递数据。
这是我的第一个观点:在MVC应用程序中的几个视图之间传递数据

@model ClassDeclarationsThsesis.Models.AddGroupViewModel 

@{ 
    ViewBag.Title = "Add Groups"; 
} 

<h2>Add Groups to subjects</h2> 

@foreach (var user in Model.Users) 
{ 
    if (user.email.Replace(" ", String.Empty) == HttpContext.Current.User.Identity.Name) 
    { 
     if (user.user_type.Replace(" ", String.Empty) == 3.ToString() || user.user_type.Replace(" ", String.Empty) == 2.ToString()) 
     { 
      using (Html.BeginForm("AddGroup", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
      { 
       @Html.AntiForgeryToken() 
       <h4>Create new groups.</h4> 
       <hr /> 
       @Html.ValidationSummary("", new { @class = "text-danger" }) 
       <div class="form-group"> 
        @{ 
         List<SelectListItem> listItems1 = new List<SelectListItem>(); 

        } 
        @foreach (var subject in Model.Subjects) 
        { 
         listItems1.Add(new SelectListItem 
         { 
          Text = subject.name, 
          Value = subject.name, 
          Selected = true 
         }); 
        } 
        @Html.LabelFor(m => m.subject_name, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.DropDownListFor(m => m.subject_name, listItems1, new { @class = "form-control" }) 
        </div> 
       </div> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.qty, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.TextBoxFor(m => m.qty, new { @class = "form-control" }) 
        </div> 
       </div> 


       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" class="btn btn-default" value="Submit" /> 
        </div> 
       </div> 

          } 
         } 
         if (user.user_type.Replace(" ", String.Empty) == 1.ToString()) 
         { 
          <p>You do not have enough permissions to enter this page. Contact the administrator.</p> 
           } 

          } 
         } 

而且我对这个控制器:

public ActionResult AddGroup(AddGroupViewModel model) 
{ 
    var entities = new ClassDeclarationsDBEntities1(); 
    var model1 = new AddGroupViewModel(); 
    model1.Subjects = entities.Subjects.ToList(); 
    model1.Users = entities.Users.ToList(); 
    // set your other properties too? 


    if (ModelState.IsValid) 
    { 

     return RedirectToAction("AddGroupsQty", "Account"); 
    } 
    return View(model1); 
} 

而我想实现的是从下拉列表中通过选择项目,这个数量变量AddGroupsQty查看。我该怎么做呢?在我的AddGroupsQty控制器中,我只是简单地返回视图。

+0

在RouteConfig.cs中是否有路由到新视图?或者您是否尝试根据输入的更改值重新显示当前视图? – Mike

+0

@ Mmcgowa3不,我没有在那里添加任何路线。我只是试图根据这个视图的输入显示不同的视图。 –

回答

1

您可以使用查询字符串传递值。

return RedirectToAction("AddGroupsQty", "Account", 
             new { qty=model.qty,subject=model.subject_name); 

假设你AddGroupsQty有2个参数来接受的数量和主题

public ActionResult AddGroupsQty(int qty,string subject) 
{ 
    // do something with the parameter 
    // to do : return something 
} 

这将使浏览器发布与查询字符串值的新的GET请求。如果你不喜欢这样做,你可以使用服务器端的临时持久mecahnism像TempData的

TempData["qty"]=model.qty; 
TempData["subject"]= model.subject_name; 
return RedirectToAction("AddGroupsQty", "Account"); 

而在你AddGroupsQty行动,

public ActionResult AddGroupsQty() 
{ 
    int qty=0; 
    string subjectName=string.Empty; 
    if(TempData["qty"]!=null) 
    { 
    qty = Convert.ToInt32(TempData["qty"]); 
    } 
    if(TempData["subject"]!=null) 
    { 
    subjectName = TempData["subject"]; 
    } 
    // Use this as needed 
    return View(); 
} 

如果你想从ADdGroupsQty这些值传递操作视图,您可以使用视图模型或ViewBag/ViewData。

相关问题