[英]ASP.NET MVC2 Form Element Names
我正在尝试使用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相同的值,但这不起作用。
谢谢!
从表单中删除runat="server"
,这在MVC中是完全不需要的。 您也不应该使用表单集合,而应该使用模型绑定。 并且摆脱了<asp:*>
控件,它们在MVC中毫无用处。
相反,使用Html助手<%: Html.TextBoxFor(m => model.property) %>
使用提供的Html.BeginForm()
帮助器要容易得多:
<%: using (Html.BeginForm()) { %>
.... your stuff
<%: } %>
重新阅读后,我发现你的问题是你正在使用表单设计器来获取标准的asp.net页面,而不是MVC页面。
尝试这个:
<%@ 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属性的名称空间的模型。
你犯的错误是使用经典的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。
很多可以在这里吸收,但我的建议是再次通过教程来掌握基础知识。 你不会后悔的。
您的设计师所做的是创建html标记,就像在Web表单中使用而不是在mvc中。 你需要的是像“cryotello”这样的东西
你需要创建一个实体表示。
您可能感兴趣的是以下项目有很好的解释http://nerddinner.codeplex.com/
Steven Sanderson的ASP.NET MVC 2书也很好
它涵盖了基本的东西
祝好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.