[英]Passing a parameter back to a view after performing a form action?
我有一個視圖,它加載具有特定記錄號的記錄。 頁面加載后,將為用戶提供登錄其他信息的機會。 一旦執行了登錄邏輯,我需要返回具有相同記錄編號的相同視圖。 我正在使用表單中的隱藏輸入將記錄號傳遞給操作。 我似乎無法弄清楚的是如何返回相同的視圖並為其提供記錄#。 我在下面嘗試的代碼無法正常工作。 我知道這是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 } );
}
編輯:
事實證明,將返回正確的視圖,但是根據下面的Index操作結果,期望模型項類型為“ 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);
}
編輯:
感謝Reddy,您的建議有效! 我唯一剩下的問題是,當我從Authenticate操作返回到索引視圖時,我似乎沒有“ jdata”。 通過身份驗證操作返回索引視圖時,是否不會重新運行我的索引操作結果? 我來自Web表單背景,在這樣的實例中,加載表單時,Load / Init事件將自動運行。 我是否需要在Authenticate操作中綁定“ jdata”並將其包含在viewmodel中?
編輯:已解決。 將我的“返回視圖”更改為“返回RedirectToAction”以解決我的最后一個問題。 感謝大家!
您最好像這樣創建一個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
,您的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 );
}
現在確保您的視圖設置為期望使用新的視圖模型
@model JObSummaryModelHelper
繼續進行操作...
代替
return View("Index", new { id = myid } );
你能做
return Index(myid);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.