我正在尝试使用MVC2和C#在ASP中创建一个非常简单的表单。我有两个元素和一个提交按钮,我使用VS2010中的设计器制作了表单。
查看:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<form id="create_event" runat="server">
<h2>Create</h2>
<p>Event ID:
<asp:TextBox ID="txtEventID" runat="server"></asp:TextBox>
</p>
<p>Event Description:
<asp:TextBox ID="txtEventDescription" runat="server"></asp:TextBox>
</p>
<p>
<asp:Button ID="submit" runat="server" Text="Add Event" />
</p>
</form>
</asp:Content>
我现在遇到的问题是当我尝试访问控制器中的表单元素时,我使用FormCollection对象获得了奇怪的键名。
控制器:
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
foreach (var key in collection)
{
var ks = key.ToString();
var value = collection[key.ToString()];
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}
两个控件的name属性用于键,它在运行时设置为ctl00 $ MainContent $ txtEventDescription和ctl00 $ MainContent $ txtEventID。有什么方法可以通过我在设计时设置的ID来引用这些项目吗?我尝试使用与id相同的值添加name属性,但这不起作用。
谢谢!
答案 0 :(得分:1)
从表单中删除runat="server"
,这在MVC中是完全不需要的。您也不应该使用表单集合,而应该使用模型绑定。并且摆脱<asp:*>
控件,它们在MVC中无用。
相反,请使用Html助手<%: Html.TextBoxFor(m => model.property) %>
使用提供的Html.BeginForm()
助手更加容易:
<%: using (Html.BeginForm()) { %>
.... your stuff
<%: } %>
重新阅读后,我发现您的问题是您使用的是表单设计器,而不是MVC页面。
答案 1 :(得分:1)
试试这个:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<YourNamespace.YourModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm("AddEvent", "YourControllerName", FormMethod.Post, new { id = "create_event" }))
{ %>
<h2>Create</h2>
<p>Event ID: <%= Html.TextBox("txtEventID", Model.txtEventID)%> </p>
<p>Event Description: <%= Html.TextBox("txtEventDescription", Model.txtEventDescription)%> </p>
<button id="submit">Add Event</button>
<% } %>
</asp:Content>
您需要使用属性“txtEventID”和“txtEventDescription”创建一个模型...这是您将在第一行(在尖括号之间)添加到Inherits属性的名称空间的模型。 / p>
您犯的错误是使用经典的ASP控件。 MVC处理纯HTML,并使用HTML帮助程序来帮助生成它。 HTML.Textbook()
是这样的帮手。
......事实上,没有必要使用帮助器和模型......你可以像这样使用直接的HTML:
<p>Event ID: <input type="text" id="txtEventID" name="txtEventID" /> </p>
<p>Event Description: <input type="text" id="txtEventDescription" name="txtEventDescription" /> </p>
我的建议:在这里运行教程:http://www.asp.net/mvc/tutorials。
最后,如果您正在使用Model方法,则可以重写Controller操作:
public ActionResult Create(YourModel Model)
{
Model.txtEventID ...
}
ASP.NET MVC使用“模型绑定”将表单的值绑定到模型,这样您就不需要访问FormCollection。
很多可以在这里吸收,但我的建议是再次通过教程来掌握基础知识。你不会后悔的。
答案 2 :(得分:0)
您的设计师所做的是创建html标记,就像在Web表单中使用而不是在mvc中一样。 你需要的是“cryotello”写的
你需要创建一个实体表示。
您可能感兴趣的是以下项目有很好的解释 http://nerddinner.codeplex.com/
同样好的投资将是Steven Sanderson的ASP.NET MVC 2书
它涵盖了加载基本内容
祝你好运