我是MVC的新手,我仍然有WPF的心态。 我有一个控制器,它返回一个ID作为参数的模型。
我想通过按剃须刀视图中的按钮来增加该参数,并重新加载具有该新Id的另一个模型。
我尝试过类似的事情:
public ActionResult Game() {
SequenceViewModel model = new SequenceViewModel(CardModelList, SelectedSequenceID);
return View(model);
}
并在该按钮上执行其他操作:
public ActionResult Press()
{
SelectedSequenceID ++;
return RedirectToAction("Game", "Game");
}
即使我的SelectedSequenceID接缝设置为OK,模型仍然具有旧值。
我的做法完全错了吗?
谢谢, 尤利亚
答案 0 :(得分:1)
您不想在控制器中增加ID,只需要指向视图中下一个ID的链接!
MVC比webforms更接近HTTP理想,HTTP是无状态的,所以你需要假设在页面请求周期之间不保留状态(好吧你可以使用session,cookies等来做,但只有保留绝对必要的东西!)
即
请记住,默认路由将采用参数" id"来自url / controller / action / id,因此示例控制器可能看起来像
public class GamesController : Controller
{
// eg. /Games/Game/1
public ActionResult Game(int id){
var SequenceModel = SequenceRepository.GetSequenceById(id); //some way of getting your model from the ID
return View(SequenceModel);
}
}
在视图中,您需要添加导航链接
@Html.ActionLink("Next", "Game", new {@id = Model.id + 1})
或作为按钮:
<input type="button" value="Next" onclick="@Html.Raw("location.href='" + Url.Action("Next", new {@id = Model.id + 1}) + "';")" />
答案 1 :(得分:0)
有很多方法,但有一种可能是这样的:
[HttpPost]
public ActionResult Press(string nextStep)
{
// not sure what this functionality does...
//SelectedSequenceID ++;
//return RedirectToAction("Game", "Game");
switch (step)
{
case "Intro":
// call method to run intro method or redirect to intro action
break;
default:
// return to start
break;
}
}
然后,将其放在您的剃须刀视图中,并使用相应的名称:
<input type="submit" name="submitButton" value="Intro" />