C# 如何在MVC2中读取HttpPost中的TextArea值和模型
我是MVC2的新手,很抱歉问了个愚蠢的问题。我想找一个好答案,但没找到。所以我的问题是: 我认为:C# 如何在MVC2中读取HttpPost中的TextArea值和模型,c#,asp.net-mvc-2,C#,Asp.net Mvc 2,我是MVC2的新手,很抱歉问了个愚蠢的问题。我想找一个好答案,但没找到。所以我的问题是: 我认为: <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.MyDB.MyProducts>>" %> <%@ Import Namespace="MyP
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.MyDB.MyProducts>>" %>
<%@ Import Namespace="MyProject.MyDB" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" runat="server">
<% using (Html.BeginForm())
{%>
<table>
<%
foreach (var item in Model)
{%>
<tr>
<td>
<%:item.name%>
</td>
<td>
<%:String.Format("{0:g}", item.date)%>
</td>
</tr>
<% } %>
</table>
<div>
<%:Html.TextArea("MyTextArea")%>
</div>
<p>
<input type="submit" value="Send" />
</p>
<% } %>
</asp:Content>
我的控制器是:
[HttpGet]
public ActionResult ViewMyProducts(int id)
{
List<MyProducts> myModel = GetMyProducts(id);
return View(myModel);
}
[HttpPost]
public ActionResult ViewMyProducts(/*???What should I put here???*/)
{
if(/*I want "MyTextArea" value here*/ == something && myModel/*from view*/.count==5}
{
//do something
}
return View(myModel);
}
[HttpGet]
公共操作结果ViewMyProducts(int id)
{
List myModel=GetMyProducts(id);
返回视图(myModel);
}
[HttpPost]
公共行动结果视图我的产品(/*??我应该在这里放什么??*/)
{
如果(/*我希望此处的“MyTextArea”值*/==something&&myModel/*from view*/.count==5}
{
//做点什么
}
返回视图(myModel);
}
因此,在HttpPost中,我需要视图中的myModel和视图中的“MyTextArea”的值。我如何获得它们?我将非常感谢任何帮助。我认为以下方法应该有效:
[HttpPost]
public ActionResult ViewMyProducts(string MyTextArea)
一个有用的方法是以您的形式显式调用您的操作-通过更改以下行:
<% using (Html.BeginForm())
或
ViewMyProducts(字符串MyTextArea,IEnumerable myModel)
{
//...
}
尽管您可以访问控制器内部以刷新模型-因此,如果您不需要传回整个内容,您仍然可以通过一个新调用重新填充视图。我认为以下方法应该可以工作:
[HttpPost]
public ActionResult ViewMyProducts(string MyTextArea)
一个有用的方法是以您的形式显式调用您的操作-通过更改以下行:
<% using (Html.BeginForm())
或
ViewMyProducts(字符串MyTextArea,IEnumerable myModel)
{
//...
}
尽管您可以在控制器内部访问以刷新模型-因此,如果不需要传回整个内容,您仍然可以使用新调用重新填充视图。string myTextArea-或者您可以只检查FormCollection(我建议使用命名变量) 如果你想从视图中取回模型,你还需要将其序列化以取回值。如果是这种情况,我会将整个过程转换为一个视图模型,该视图模型要么从你的模型中派生,要么有一个公共属性作为你的模型,为MyTextArea添加一个属性,然后为你的模型发出隐藏的输入,以适当的属性命名。假设您的模型被持久化到某个位置(数据库),我只需传递键(id)并从操作结果中重新水化该对象
[HttpPost]
public ActionResult ViewMyProducts(ViewMyProductsViewModel viewModel)
{
if(viewModel.MyTextArea == "something" && (IEnumerable<foo>)myModel).Count()==5)) {
var model = repo.Get(myModel.First().Id);
// do something with the model
}
return View(viewModel);
}
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.MyDB.MyProducts>>" %>
<%@ Import Namespace="MyProject.MyDB" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" runat="server">
<% using (Html.BeginForm())
{%>
<table>
<%
foreach (var item in Model)
{%>
<tr>
<td>
<input type="hidden" name="viewModel.Id" value="<%:item.id%>" />
<%:item.name%>
</td>
<td>
<%:String.Format("{0:g}", item.date)%>
</td>
</tr>
<% } %>
</table>
<div>
<%:Html.TextArea("MyTextArea")%>
</div>
<p>
<input type="submit" value="Send" />
</p>
<% } %>
</asp:Content>
[HttpPost]
公共行动结果ViewMyProducts(ViewMyProductsViewModel viewModel)
{
if(viewModel.MyTextArea==“something”&(IEnumerable)myModel.Count()==5)){
var model=repo.Get(myModel.First().Id);
//对模型做些什么
}
返回视图(viewModel);
}
字符串myTextArea-或者您可以只检查FormCollection(我建议使用命名变量)
如果要从视图中获取模型,还需要将其序列化以获取值。如果是这种情况,我会将整个内容转换为一个视图模型,该视图模型要么派生自您的模型,要么具有作为您的模型的公共属性,为MyTextArea添加一个属性,然后为您的模型发出隐藏的输入,以适当的属性命名。假设您的模型被保存在某个地方(数据库),我只需传递键(id)并从操作结果中重新水化对象
[HttpPost]
public ActionResult ViewMyProducts(ViewMyProductsViewModel viewModel)
{
if(viewModel.MyTextArea == "something" && (IEnumerable<foo>)myModel).Count()==5)) {
var model = repo.Get(myModel.First().Id);
// do something with the model
}
return View(viewModel);
}
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.MyDB.MyProducts>>" %>
<%@ Import Namespace="MyProject.MyDB" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" runat="server">
<% using (Html.BeginForm())
{%>
<table>
<%
foreach (var item in Model)
{%>
<tr>
<td>
<input type="hidden" name="viewModel.Id" value="<%:item.id%>" />
<%:item.name%>
</td>
<td>
<%:String.Format("{0:g}", item.date)%>
</td>
</tr>
<% } %>
</table>
<div>
<%:Html.TextArea("MyTextArea")%>
</div>
<p>
<input type="submit" value="Send" />
</p>
<% } %>
</asp:Content>
[HttpPost]
公共行动结果ViewMyProducts(ViewMyProductsViewModel viewModel)
{
if(viewModel.MyTextArea==“something”&(IEnumerable)myModel.Count()==5)){
var model=repo.Get(myModel.First().Id);
//对模型做些什么
}
返回视图(viewModel);
}
首先,将item.name和item.date呈现为文本控件,而不是html控件。因此,您将无法在控制器方法参数中接收它。首先,您将item.name和item.date呈现为文本而不是html控件。因此,您将无法在控制器方法参数中接收它。[HttpPost]公共操作结果ViewMyProducts(字符串MyTextArea){………}??????????而我的模型呢?尽管我尽量避开隐藏的字段,但我还是不断地回到它们:)。我尝试过你的解决方案:我有点害怕发生这种情况——因为我不知道你是否能够传回你的整个模型——仅仅是因为MVC的工作方式。您最好的选择可能是使用另一种存储方法来保持模型的活力。您是否考虑过将其存储在Session/ViewData/TempData中,然后在发布后访问它?是的,Rionmonster做得很好!Session完成了任务,最重要的是,我没有使用Hidden。伟大的感谢大家的快速回答。[HttpPost]公共操作结果ViewMyProducts(字符串MyTextArea){………}??????????而我的模型呢?尽管我尽量避开隐藏的字段,但我还是不断地回到它们:)。我尝试过你的解决方案:我有点害怕发生这种情况——因为我不知道你是否能够传回你的整个模型——仅仅是因为MVC的工作方式。您最好的选择可能是使用另一种存储方法来保持模型的活力。您是否考虑过将其存储在Session/ViewData/TempData中,然后在发布后访问它?是的,Rionmonster做得很好!Session完成了任务,最重要的是,我没有使用Hidden。伟大的谢谢大家的快速回答。我正在努力避免在HttpPost中再次接触DB。看来
ViewMyProducts(string MyTextArea, IEnumerable<MyProject.MyDB.MyProducts> myModel)
{
//...
}
[HttpPost]
public ActionResult ViewMyProducts(ViewMyProductsViewModel viewModel)
{
if(viewModel.MyTextArea == "something" && (IEnumerable<foo>)myModel).Count()==5)) {
var model = repo.Get(myModel.First().Id);
// do something with the model
}
return View(viewModel);
}
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.MyDB.MyProducts>>" %>
<%@ Import Namespace="MyProject.MyDB" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" runat="server">
<% using (Html.BeginForm())
{%>
<table>
<%
foreach (var item in Model)
{%>
<tr>
<td>
<input type="hidden" name="viewModel.Id" value="<%:item.id%>" />
<%:item.name%>
</td>
<td>
<%:String.Format("{0:g}", item.date)%>
</td>
</tr>
<% } %>
</table>
<div>
<%:Html.TextArea("MyTextArea")%>
</div>
<p>
<input type="submit" value="Send" />
</p>
<% } %>
</asp:Content>