PageData 无法在 WebMatrix 中传递数据

PageData fails to pass data in WebMatrix

我正在使用 WebMatrix 构建网站。我希望用户在主页中输入他们的名字,重定向后他们的名字将显示在另一种形式的结果中。但是我的代码不起作用。

这是主页的一个片段:

@{
    if (IsPost) {
        PageData["fullname"] = String.Format("{0} {1}", Request.Form["mainForename"], Request.Form["mainSurname"]);
        PageData["redir"] = Request.Form["goTo"];
    }
}

<form name="mainForm" id="mainForm" method="post" action="foo.cshtml" onsubmit="return mainValid(this);">
    <h2>Please enter your name:</h2>
    <label for="mainForename" class="label">Forename:</label>
    <input type="text" name="mainForename" id="mainForename">
    <label for="mainSurname" class="label">Surname:</label>
    <input type="text" name="mainSurname" id="mainSurname">
    <input type="submit" name="goTo" value="Go to Form 1">
    <input type="submit" name="goTo" value="Go to Form 2">
</form>

这是主页指向的页面片段:

@{
    if (IsPost) {
        var display = PageData["fullname"];
    }
}

<form name="form1" id="form1" method="post" onsubmit="return Valid(this);">
    <!-- some HTML code -->
    <input type="submit" name="submit" value="Get results">
    <p>@Html.Raw(display)</p>
</form>

但是我在 mainFormPageData["fullname"]PageData["redir"] 中提交的任何值似乎都没有值。有什么问题?

如有任何帮助,我们将不胜感激。

我发现您的代码中有些地方不太好:

  1. 为什么您的表单操作设置为 cshtml 文件?它必须是控制器中的一个动作;
  2. 为什么要使用 "hardcoded" 表单标签?使用 @using(@Html.BeginForm('name', 'action', 'controller'...)
  3. 为什么需要 WebMatrix?第一个 - 它很旧,第二个它用于网格 - 你有一个表格。

使用模型,在@Html.BeginForm中使用@Html.TextBoxFor(x=>x.UserName)。 然后 post 操作中的表单 post 重定向到另一个包含第二个表单的页面,并有一个模型。 post 操作应该看起来像这样

[HttpPost]
public ActionResult RedirectToAnotherForm(MyModel model)
{
return View('SecondFormView', new SecondFormModel{
userName = model.name
})
}

我认为 PageData 仅在将子页面合并为单个页面时才有用。

改为尝试使用 PageData 的 Session 对象。会话将可用于该用户的所有页面。

所以在有 PageData["fullname"] 的地方使用 Session["fullname"]

有关详细信息,请参阅 http://www.mikesdotnetting.com/article/192/transferring-data-between-asp-net-web-pages