C# 在执行表单操作后将参数传递回视图?
我有一个视图,可以加载具有特定记录编号的记录。加载页面后,用户有机会登录以获取更多信息。一旦执行了登录逻辑,我就需要返回到相同的视图,并且记录号保持不变。我使用表单中的隐藏输入将记录编号传递给操作。我似乎不明白的是,如何返回到相同的视图,并为其提供记录。下面我尝试的代码无效。我知道这是MVC101的东西,但是如果你能给我一个正确的提示,我将不胜感激,或者你可以随意放弃我的方法,提出更好的建议 视图中的表格:C# 在执行表单操作后将参数传递回视图?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,visual-studio-2012,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Visual Studio 2012,我有一个视图,可以加载具有特定记录编号的记录。加载页面后,用户有机会登录以获取更多信息。一旦执行了登录逻辑,我就需要返回到相同的视图,并且记录号保持不变。我使用表单中的隐藏输入将记录编号传递给操作。我似乎不明白的是,如何返回到相同的视图,并为其提供记录。下面我尝试的代码无效。我知道这是MVC101的东西,但是如果你能给我一个正确的提示,我将不胜感激,或者你可以随意放弃我的方法,提出更好的建议 视图中的表格: <form action="/MyView/Authenticate/@item
<form action="/MyView/Authenticate/@item.ID" method="post" enctype="multipart/form-data">
<input name="form_id" type="hidden" value="@item.ID">
.....
编辑:
结果是返回了正确的视图,但根据下面的索引操作结果,它期望模型项类型为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。当我通过身份验证操作返回索引视图时,是否没有重新运行索引操作结果?我来自一个WebForms背景,在这样一个实例中,加载表单时Load/Init事件将自动运行。我是否需要在Authenticate操作中绑定jdata并将其包含在viewmodel中
编辑:已解决。将我的返回视图更改为返回重定向操作以解决我的最终问题。谢谢大家 而不是
return View("Index", new { id = myid } );
你能做些什么
return Index(myid);
最好为此创建ViewModel,如下所示: 创建视图模型类,即
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输出
做一些教程来学习这些惯例是非常值得的,在这方面投入少量的时间将在将来为您节省大量的时间。请在编辑后回答以下问题: 您只想传递给视图一个int Id和您的列表jdata,对吗 因此,创建一个ViewModelJobSummaryModelHelper 现在,请确保您的视图已设置为使用此新的viewmodel
@model JObSummaryModelHelper
继续操作……那么它是否返回到正确的视图,但Id不正确?还是会完全进入错误的观点?你的回答对我的解决方案贡献最大。谢谢你的帮助!
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 );
}
@model JObSummaryModelHelper