2013-05-08 74 views
2

我正在使用MVC 4創建一個遊戲。有一個犯罪特徵,我不能解決它。我嘗試了很多東西,但因爲我是MVC4的新手,所以我無法弄清楚。actionresult的不同結果

我已經創建了一個單選按鈕列表,每個不同的選項應該給出不同的結果。這是迄今爲止代碼:

控制器:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using FiveGangs.Models; 

namespace FiveGangs.Controllers.Game { 
[Authorize] 
public class CrimesController : Controller { 
    // 
    // GET: /Crimes/ 
    [HttpGet] 
    public ActionResult Index() { 
     return View(); 
    } 
    // 
    // POST: /Crimes/ 
    [HttpPost] 
    public ActionResult Index(LocalCrimeModel.Crime crimeType) { 
     //1 is de beste crime, 10 de slechste 
     ViewBag.Message = "You commited the crime!"; 
     var db = new FGEntities(); 

     var g = db.UserGangster.FirstOrDefault(p => p.UserProfile.UserName == User.Identity.Name); 


     g.GansterStatistic.CrimesSuccess++; 
      g.Experience += 1000; 
     g.Cash += 100; 
     db.SaveChanges(); 

     return View(); 
    } 
} 
} 

型號:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace FiveGangs.Models 
{ 
public class LocalCrimeModel 
{ 
    public enum Crime 
    { 
     Crime01 = 1, 
     Crime02 = 2, 
     Crime03 = 3, 
     Crime04 = 4, 
     Crime05 = 5, 
     Crime06 = 6, 
     Crime07 = 7, 
     Crime08 = 8, 
     Crime09 = 9, 
     Crime10 = 10, 
    } 

    public Crime SelectedCrime { get; set; } 
} 
} 

查看:

@using FiveGangs.Models 
@model FiveGangs.Models.LocalCrimeModel 

<!DOCTYPE html> 

<html> 
<head> 
<title>Crimes</title> 
</head> 
<body> 
<div> 
    <h2>Crimes</h2> 
    @if (ViewBag.Message != null) { 
     <p class="warning">@ViewBag.Message</p> 
    } 

    @using (Html.BeginForm("Index")) { 
     @Html.RadioButton("crimetype", LocalCrimeModel.Crime.Crime01, false)@: Rob the local bank<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime02, false)@: Rob the local casino<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime03, false)@: Rob a jewelry store<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime04, false)@: Rob the local café<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime05, false)@: Steal casino chips from the local casino<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime06, false)@: Rob the local theatre<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime07, false)@: Rob the local supermarket<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime08, false)@: Rob a laundry service<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime09, false)@: Empty a parking meter<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime10, false)@: Pickpocket someone<br /><br /> 

     <input class="btn btn-large btn-primary" type="submit" value="Commit crime!" /> 
    } 
</div> 
</body> 
</html> 

到目前爲止,我能成功地執行了罪,經驗和錢被添加到數據庫中。我堅持改變每次犯罪的「支出」。任何幫助表示讚賞,我一直在谷歌搜索2天沒有結果。

感謝

+0

所以,你只是想'g.Experience + = 1000;'和'g.Cash + = 100;'是可變的,而不是硬編碼到1000和100? – Belogix 2013-05-08 10:52:54

+0

我想讓每個級別的犯罪都有不同的支出,例如,犯罪0的支出是exp 100-110,犯罪0的支出是110-120。 – 2013-05-08 11:49:24

回答

2

您是否在尋找switch的語言構造?

你可以這樣寫:

switch (crimeType) 
{ 
    case LocalCrimeModel.Crime.Crime01: 
     g.Experience += 1000; 
     g.Cash += 100; 
     break; 
    case LocalCrimeModel.Crime.Crime02: 
     g.Experience += 2000; 
     g.Cash += 200; 
     break; 
    case LocalCrimeModel.Crime.Crime03: 
     g.Experience += 3000; 
     g.Cash += 300; 
     break; 
    case LocalCrimeModel.Crime.Crime04: 
     g.Experience += 4000; 
     g.Cash += 400; 
     break; 
... 
    default: 
     break;   
} 

不是嗎?


編輯

在另一方面這種硬編碼的邏輯是不是真正可擴展性,犯罪不應該是一個enum,但List<Crime>填充形式數據庫,而不是。一個Crime應該是這樣的:

public class LocalCrimeModel 
{ 
    public class Crime 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public decimal Cash { get; set; } 
     public int Experience { get; set; } 
    } 

    public string Message { get; set; } 

    public IList<Crime> Crimes { get; set; } 

    public int SelectedCrimeID { get; set; } 

    public Crime SelectedCrime 
    { 
     get 
     { 
      if (this.Crimes != null) 
      { 
       return this.Crimes.FirstOrDefault(o => o.ID == this.SelectedCrimeID); 
      } 
      else 
      { 
       return null; 
      } 
     } 
    } 
} 

CrimesController可以像:

public class CrimesController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new LocalCrimeModel(); 
     model.Crimes = GetCrimes(); // THIS SHOULD BE A RESULT OF A DATABASE QUERY 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(LocalCrimeModel model) 
    { 
     if (model != null) 
     { 
      model = new LocalCrimeModel(); // just to be sure 
     } 

     model.Crimes = GetCrimes(); // USE THE SAME QUERY HERE 

     if (model != null && model.SelectedCrime != null) 
     { 
      var db = new FGEntities(); 

      var g = db.UserGangster.FirstOrDefault(p => p.UserProfile.UserName == User.Identity.Name); 

      g.GansterStatistic.CrimesSuccess++; 

      g.Experience += model.SelectedCrime.Experience; 
      g.Cash += model.SelectedCrime.Cash; 
      db.SaveChanges(); 

      model.Message = "You commited the crime!"; 
     } 
     else 
     { 
      model.Message = "Crime does not exist!"; 
     } 

     return View(model); 
    } 
} 

而且您認爲可能是這樣的:

@using FiveGangs.Models 
@model FiveGangs.Models.LocalCrimeModel 

<!DOCTYPE html> 

<html> 
<head> 
<title>Crimes</title> 
</head> 
<body> 
<div> 
    <h2>Crimes</h2> 
    @if (model.Message != null) 
    { 
     <p class="warning">@model.Message</p> 
    } 

    @using (Html.BeginForm()) 
    { 
     foreach (var crime in Model.Crimes) 
     { 
      <text>@Html.RadioButton("SelectedCrimeID", crime.ID, false): @crime.Name<br /></text> 
     } 
     <br /> 
     <input class="btn btn-large btn-primary" type="submit" value="Commit crime!" /> 
    } 
</div> 
</body> 
</html> 
+0

哇,非常感謝!我仍然必須弄清楚一些事情,但這很好。我有工作時會更新你!再次感謝! – 2013-05-08 12:12:23

1

你應該有一個Crime表在數據庫中,這樣你可以存儲你的支出對每個犯罪。

在另一個說明中,將所有這些單選按鈕更改爲下拉列表不是更好。