简体   繁体   English

如何在ASP.NET MVC中的页面之间正确发布值?

[英]How do I correctly post values between pages in ASP.NET MVC?

For love nor money I can't understand the magic mapping that ASP.NET MVC performs when I post values between pages. 为了爱情或金钱,当我在页面之间发布值时,我无法理解ASP.NET MVC执行的魔术映射。

I have a "wizard" consisting of 3 controller actions: NewRequest, NewRequestValidation and PostNewRequest. 我有一个由3个控制器操作组成的“向导”:NewRequest,NewRequestValidation和PostNewRequest。 NewRequest collects some form input and passes it to NewRequestValidation where the user confirms their request and either submits it to PostNewRequest or rejects it and returns to NewRequest. NewRequest收集一些表单输入并将其传递给NewRequestValidation,在此用户确认他们的请求,然后将其提交给PostNewRequest或拒绝它并返回给NewRequest。

NewRequest uses: NewRequest使用:

@model SCL.Intranet.Controllers.HR.LeaveRequests.NewLeaveRequestViewModel

NewRequestValidation expects the NewLeaveRequestViewModel as a parameter on the method signature: NewRequestValidation希望将NewLeaveRequestViewModel作为方法签名上的参数:

public ActionResult NewRequestValidation(NewLeaveRequestViewModel lrvm)

It then does some validation and passes a NewLeaveRequestAnalysisViewModel down to the corresponding View. 然后,它进行一些验证,并将NewLeaveRequestAnalysisViewModel向下传递到相应的View。

The NewRequestValidation view uses: NewRequestValidation视图使用:

@model SCL.Intranet.Controllers.HR.LeaveRequests.NewLeaveRequestAnalysisViewModel

I am trying to post some parts of the NewLeaveRequestAnalysisViewModel, specifically the "NewLeaveRequestViewModel" part into PostNewRequest. 我正在尝试将NewLeaveRequestAnalysisViewModel的某些部分,特别是“ NewLeaveRequestViewModel”部分发布到PostNewRequest中。

My form definition, including some hidden fields to transport the appropriate values, looks like: 我的表单定义(包括一些用于传输适当值的隐藏字段)如下所示:

@using (Html.BeginForm("PostNewRequest", "LeaveRequests", new { area = "HR" }, FormMethod.Post, new { @class = "form-horizontal" }))
 {
  @Html.HiddenFor(m => m.NewLeaveRequest)
  @Html.HiddenFor(m => m.NewLeaveRequest.From.Date)
  @Html.HiddenFor(m => m.NewLeaveRequest.From.Half)
  @Html.HiddenFor(m => m.NewLeaveRequest.Until.Date)
  @Html.HiddenFor(m => m.NewLeaveRequest.Until.Half)
  @Html.HiddenFor(m => m.NewLeaveRequest.Type.LeaveRequestTypeId)

  // Some presentation stuff here.
}

Finally, PostNewRequest expects a NewLeaveRequestViewModel: 最后,PostNewRequest需要一个NewLeaveRequestViewModel:

public ActionResult PostNewRequest(NewLeaveRequestViewModel lrvm)

I understand that I need to pass a NewLeaveRequestViewModel in, and that my current code doesn't work because I'm actually just passing in a bunch of fields that happen to have their values from a previous instance of NewLeaveRequestViewModel. 我知道我需要传入一个NewLeaveRequestViewModel,而我的当前代码不起作用,因为实际上我只是传入了一些字段,这些字段恰好具有来自NewLeaveRequestViewModel的先前实例的值。

The question is: How do I set up a new NewLeaveRequestViewModel in NewRequestValidation that will match the signature on PostNewRequest? 问题是:如何在NewRequestValidation中设置与PostNewRequest上的签名匹配的新NewLeaveRequestViewModel?

I fixed this by using TempData as suggested (I think!) by meda. 我通过使用meda建议的TempData来解决此问题。

In the "NewRequestValidation" action, I commit the NewLeaveRequestViewModel to TempData: 在“ NewRequestValidation”操作中,我将NewLeaveRequestViewModel提交给TempData:

TempData.Add("PendingLeaveRequest", lrvm);

Then, in PostNewRequest, I get it back out of TempData again: 然后,在PostNewRequest中,我再次将其从TempData中取出:

if (TempData.ContainsKey("PendingLeaveRequest"))
{
  var lrvm = TempData["PendingLeaveRequest"] as NewLeaveRequestViewModel;
  // Do something with lrvm
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在ASP.NET MVC应用程序中使用ASP.NET页? - How do I use ASP.NET pages in an ASP.NET MVC application? 如何在ASP.NET MVC中向控制器正确提交复选框值 - How to correctly submit checkbox values to controller in ASP.NET MVC 如何将数据从asp.net MVC控制器发布到非MVC asp.net页面? - How do I POST data from an asp.net MVC controller to a non-MVC asp.net page? 如何:在ASP.NET网页之间传递敏感值? - How to: Pass sensitive values Between ASP.NET Web Pages? 如何在Asp.net MVC中正确编辑 - How to do edit correctly in Asp.net MVC 如何强制用户不通过asp.net mvc 2应用程序中的url输入跳过页面? - How do I force users to not skip pages via url input in an asp.net mvc 2 application? 如何在ASP.NET MVC中维护有关用户是否在整个页面中“登录”的信息? - How in ASP.NET MVC do I maintain info about whether a user is “logged in” throughout pages? 如何设置在ASP.NET MVC3的搜索中显示的页面数 - How do I set the number of pages shown in a search for ASP.NET MVC3 如何在ASP.Net Core 2.0 Razor页面中发布IFormFile? - How do I post an IFormFile in ASP.Net Core 2.0 Razor Pages? 如何在自定义构建的 ASP.NET Core Razor Pages 可编辑网格中发布行 ID? - How do I post the row id in a custom built ASP.NET Core Razor Pages editable Grid?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM