2016-12-27 2 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 View , Как мне это сделать? В моем контроллере 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.

Смежные вопросы