2014-03-13 236 views
0

我使用MVC和希望傳遞的價值觀,控制器,控制器如何將值 - 控制器傳遞給控制器​​?

我的代碼:

public ActionResult Index() 
{ 
    List<string> SportsName = new List<string>(); 
    var sport = Db.Universities.Where(ud => ud.Contact.UserName.ToLower().Trim() == User.Identity.Name.ToLower().Trim()).SingleOrDefault(); 
    var spt = Db.Departments.Where(i => i.UniversityID == sport.UniversityID && i.DepartmentCodeID == 4).SingleOrDefault(); 
    unvId = int.Parse(sport.UniversityID.ToString()); 
    List<Sport> dept = Db.Sports.Where(s => s.DepartmentID == spt.DepartmentID).ToList(); 

    foreach (var sname in dept.ToList()) 
    { 
     var name = Db.SportsCodes.Where(s => s.SportsCodeID == sname.SportsCodeID).First(); 
     SportsName.Add(name.SportsName); 
    } 
    ViewBag.SportsName = SportsName; 
    return View(); 
} 

public ActionResult Create(string sports) 
{ 
    ViewBag.SportsName = sports; 
    int s = unvId; 
    return View(); 
} 

我想要的「運動」值也創造了行動。如何在創造行動中獲得'運動'的價值?

回答

0

我想你的問題是你想通過索引SportsName創建。

從索引視圖(.cshtml)當你調用創建通過AJAX調用方法,通過ViewBag.Sports作爲參數的值。

例如:

$('#Link').click(function() {  
    $.ajax({ 
     url: http://localhost/Sports/Create, 
     type: 'GET', 
     data: { 
       sports: "@ViewBag.SportsName" 
       }, 
     success: function() { 
     }, 
     error: function() {     
     } 
    }); 

[注:這被認爲是控制器的名字是體育]

This回答你的問題。

0

您有多種選擇。如果只有個別動作方法需要一個值,取在需要它的每一個動作方法的價值:

public ActionResult SomeMethod() 
{ 
    var sport = Db.Universities.Where(ud => ud.Contact.UserName.ToLower().Trim() == User.Identity.Name.ToLower().Trim()).SingleOrDefault(); 
    // ... 
} 

如果重複的代碼看起來不雅觀,它抽象到一個輔助方法:

public ActionResult SomeMethod() 
{ 
    var sport = GetSport(); 
    // ... 
} 

private SomeType GetSport() 
{ 
    return Db.Universities.Where(ud => ud.Contact.UserName.ToLower().Trim() == User.Identity.Name.ToLower().Trim()).SingleOrDefault(); 
} 

如果應在類的任何地方訪問和在邏輯上是一類級別的成員,使其成爲一個類級成員:

private SomeType sport = Db.Universities.Where(ud => ud.Contact.UserName.ToLower().Trim() == User.Identity.Name.ToLower().Trim()).SingleOrDefault(); 

public ActionResult SomeMethod() 
{ 
    // sport is accessible here 
    // ... 
} 

雖然現在我注意到它,這引出了一個問題:「什麼是Db「?如果這是一個數據庫上下文,那麼它看起來像擴大了它的範圍,超出了它應該是應該是。數據庫上下文和連接應儘可能保持在儘可能小的範圍內。每個需要一個的方法都應該創建它,使用它並銷燬它。在更大的範圍內共享它們而不明確知道自己在做什麼會引發大量問題。在這種情況下,類級成員將在構造函數中初始化:

private SomeType sport; 

public YourController() 
{ 
    using (var Db = BuildYourDBContext()) 
     sport = Db.Universities.Where(ud => ud.Contact.UserName.ToLower().Trim() == User.Identity.Name.ToLower().Trim()).SingleOrDefault(); 
} 

public ActionResult SomeMethod() 
{ 
    // sport is accessible here 
    // ... 
} 

你看它的任何方式,問題是,作爲一個控制器並沒有真正發揮作用。控制器就像面向對象系統中的任何對象一樣。它以完全相同的方式分享成員。