Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在执行表单操作后将参数传递回视图?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Visual Studio 2012 - Fatal编程技术网

C# 在执行表单操作后将参数传递回视图?

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

我有一个视图,可以加载具有特定记录编号的记录。加载页面后,用户有机会登录以获取更多信息。一旦执行了登录逻辑,我就需要返回到相同的视图,并且记录号保持不变。我使用表单中的隐藏输入将记录编号传递给操作。我似乎不明白的是,如何返回到相同的视图,并为其提供记录。下面我尝试的代码无效。我知道这是MVC101的东西,但是如果你能给我一个正确的提示,我将不胜感激,或者你可以随意放弃我的方法,提出更好的建议

视图中的表格:

 <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