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>
但是我在 mainForm
、PageData["fullname"]
和 PageData["redir"]
中提交的任何值似乎都没有值。有什么问题?
如有任何帮助,我们将不胜感激。
我发现您的代码中有些地方不太好:
- 为什么您的表单操作设置为
cshtml
文件?它必须是控制器中的一个动作;
- 为什么要使用 "hardcoded" 表单标签?使用
@using(@Html.BeginForm('name', 'action', 'controller'...)
- 为什么需要 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
我正在使用 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>
但是我在 mainForm
、PageData["fullname"]
和 PageData["redir"]
中提交的任何值似乎都没有值。有什么问题?
如有任何帮助,我们将不胜感激。
我发现您的代码中有些地方不太好:
- 为什么您的表单操作设置为
cshtml
文件?它必须是控制器中的一个动作; - 为什么要使用 "hardcoded" 表单标签?使用
@using(@Html.BeginForm('name', 'action', 'controller'...)
- 为什么需要 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