Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# @Viewbag在第一次使用时提供空值_C#_Html_Jquery_Asp.net Mvc - Fatal编程技术网

C# @Viewbag在第一次使用时提供空值

C# @Viewbag在第一次使用时提供空值,c#,html,jquery,asp.net-mvc,C#,Html,Jquery,Asp.net Mvc,好的,问题是我试图从带有的视图中获取一个值,然后将其带到控制器并对其进行一些数学运算,然后使用Tempdata将其重新发送到视图。问题是,第一次尝试使用它时,我得到一个空值,但当站点重新加载时,第二次我得到我输入的最后一个值的值: 控制器: [HttpPost] 公共行动结果主页(FormCollection frm) { int firstnumber=Convert.ToInt32(frm[“firstnumber”]); int secondnumber=Convert.ToInt32(f

好的,问题是我试图从带有
的视图中获取一个值,然后将其带到控制器并对其进行一些数学运算,然后使用Tempdata将其重新发送到视图。问题是,第一次尝试使用它时,我得到一个空值,但当站点重新加载时,第二次我得到我输入的最后一个值的值:

控制器:

[HttpPost]
公共行动结果主页(FormCollection frm)
{
int firstnumber=Convert.ToInt32(frm[“firstnumber”]);
int secondnumber=Convert.ToInt32(frm[“secondnumber”]);
TempData[“secondnumber”]=secondnumber;
TempData.Keep();
//int differenceresult=第一个数字-第二个数字;
//int sumresult=第一个数字+第二个数字;
//ViewBag.differenceresult=differenceresult;
//ViewBag.sumresult=sumresult;
返回视图();
}
视图:

$(“#btnsum”)。单击(函数(){
警报(@Html.Encode(@TempData[“secondnumber”]))
})

有人能帮我吗?

当您第一次加载页面时,它会触发一个动作动词,在您的动作方法
主页
上是
HttpGet
。换句话说,您需要一个
HttpGet
操作方法,这样当您触发您在上面的代码上发布的
HttpPost
时,它将正确地声明您的TempData变量。以下是我可以为您提供的一个示例:

[HttpGet]
public ActionResult Home_Page()
{
  int firstnumber = Convert.ToInt32(frm["firstnumber"]);
  int secondnumber = Convert.ToInt32(frm["secondnumber"]);
  TempData["secondnumber"] = secondnumber;
  TempData.Keep();
  return View();
}

如果两个操作具有相同的名称,但具有不同的操作谓词(HttpGet、HttpPost),则它们必须具有不同的参数声明,以便编译器不会认为它们不明确。因此,在本例中,在我的示例中,我没有声明任何参数。

第一次加载页面时,它将在您的操作方法
主页上触发一个动作动词
HttpGet
。换句话说,您需要一个
HttpGet
操作方法,这样当您触发您在上面的代码上发布的
HttpPost
时,它将正确地声明您的TempData变量。以下是我可以为您提供的一个示例:

[HttpGet]
public ActionResult Home_Page()
{
  int firstnumber = Convert.ToInt32(frm["firstnumber"]);
  int secondnumber = Convert.ToInt32(frm["secondnumber"]);
  TempData["secondnumber"] = secondnumber;
  TempData.Keep();
  return View();
}

如果两个操作具有相同的名称,但具有不同的操作谓词(HttpGet、HttpPost),则它们必须具有不同的参数声明,以便编译器不会认为它们不明确。因此,在本例中,在我的示例中,我没有声明任何参数。

看起来您只将TempData值放在HttpPost操作中,而是由HttpGet呈现的第一次页面中。请您在这两个操作中设置制动点,并检查第一次和第二次使用的操作。看起来您仅在HttpPost操作中放置了TempData值,但在HttpGet呈现的第一次页面中放置了TempData值。你们能不能在两个地方都设置刹车点,并检查一下,第一次和第二次使用了什么动作。嗨,谢谢你们的回答。我试过你说的了。但是这次我得到的第一个值是0,之后的任何值都会得到nullHi,谢谢你的回答。我试过你说的了。但这一次我得到的第一个值是0,之后的任何值都是null