我有一个加载具有特定记录号的记录的视图。加载页面后,它为用户提供了登录其他信息的机会。一旦执行登录逻辑,我需要返回具有相同记录号的相同视图。我正在使用表单中的隐藏输入将记录号传递给操作。我似乎无法弄清楚的是如何返回到同一个视图并提供该记录#。我在下面尝试的代码不起作用。我知道这是MVC 101的东西,但是在正确的方向上的暗示会受到赞赏,或者随意废弃我的方法并提出更好的建议!
视野中的表格:
<form action="/MyView/Authenticate/@item.ID" method="post" enctype="multipart/form-data">
<input name="form_id" type="hidden" value="@item.ID">
.....
表格行动:
[HttpPost]
public ActionResult Authenticate()
{
int myid = Convert.ToInt16(Request["form_id"]);
.....
return View("Index", new { id = myid } );
}
编辑:
事实证明正在返回正确的视图,但是根据下面的索引操作结果,它期望模型项类型为“JobSummaryModel”。所以我真正需要回答的问题是,如何将记录ID和此视图模型传递给它?
public ActionResult Index(int id = 0)
{
List<JobSummaryModel> jdata;
ViewBag.IsResults = false;
if (id != 0)
{
ViewBag.IsResults = true;
}
jdata = db.Jobs.Where(c => c.ID == id).Select(c => new JobSummaryModel() { ID = c.ID, Name = c.Name, City = c.City, PostalCode = c.PostalCode, JobDescription = c.PositionDescription }).ToList();
return View(jdata);
}
编辑:
谢谢雷迪,你的建议奏效了!我唯一剩下的问题是,当我从Authenticate操作返回我的索引视图时,我似乎没有我的“jdata”。通过我的Authenticate操作返回索引视图时,我的索引操作结果是否未重新运行?我来自Web表单背景,在这样的实例中,Load / Init事件将在加载表单时自动运行。我是否需要在Authenticate操作中绑定我的“jdata”并将其包含在viewmodel中?
编辑:已解决。将我的“返回视图”更改为“返回RedirectToAction”以解决我的最终问题。谢谢大家!答案 0 :(得分:1)
最好为此创建一个ViewModel:
创建一个View Model类,即
public class AuthViewModel
{
public int MyId { get; set; }
}
在您的视图中,将以下指令放在顶部:
@model AuthViewModel
在您的初始[HttpGet]
方法中,返回视图模型:
[HttpGet]
public ActionResult Authenticate()
{
var model = new AuthViewModel { MyId = 123 };
return View("Index", model );
}
最好在视图中使用Html助手,以便将其更改为:
@using(Html.BeginForm()
{
@Html.HiddenFor(m => m.MyId)
...
}
以上使用命名约定来回发您所处的操作。
然后将其返回到您的视图:
[HttpPost]
public ActionResult Authenticate(AuthViewModel model)
{
int myid = model.MyId;
return View("Index", model );
}
然后您可以使用此剃刀语法@Model.MyId
真的值得做一些教程来学习惯例,投入少量时间将为您节省大量时间。
答案 1 :(得分:1)
回答你的后编辑:
您要传递给查看的所有内容是int Id
和List<JobSummaryModel> jdata
对吗?
所以创建一个ViewModel JObSummaryModelHelper
Public class JObSummaryModelHelper
{
public int Id {get;set;}
public List<JobSummaryModel> jdata {get;set;}
}
现在在您的控制器中
public ActionResult Index(int id = 0)
{
JObSummaryModelHelper jobDetails = new JObSummaryModelHelper();
jobDetails.Id = id;
ViewBag.IsResults = false;
if (id != 0)
{
ViewBag.IsResults = true;
}
jobDetails .jdata = db.Jobs.Where(c => c.ID == id).Select(c => new JobSummaryModel() { ID = c.ID, Name = c.Name, City = c.City, PostalCode = c.PostalCode, JobDescription = c.PositionDescription }).ToList();
return View(jobDetails );
}
现在确保您的视图设置为期望这个新的viewmodel
@model JObSummaryModelHelper
继续你的操纵......
答案 2 :(得分:0)
而不是
return View("Index", new { id = myid } );
你能做到吗
return Index(myid);