ASP.NET MVC2表单元素名称
我想在使用MVC2和C#的ASP中制作一个非常简单的表单。我有两个元素和一个提交按钮,并且我使用VS2010中的设计器创建了表单。ASP.NET MVC2表单元素名称
查看:
<%@ 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”模型......这是它的命名空间,你会在添加到继承属性模型第一行(在尖括号之间)。
您所犯的错误是使用传统的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 。
最后,如果你使用的模型方法,你可以重写你的控制器操作这样的:
public ActionResult Create(YourModel Model)
{
Model.txtEventID ...
}
ASP.NET MVC使用“模式结合”的形式的值绑定到你的模型,所以你不需要访问FormCollection。
在这里很受同化,但我的建议再次是通过教程抓住基础知识。你不会后悔的。
你的设计师已经做了什么创建HTML标记为在网页形式中使用,而不是在MVC。 你需要的东西就像“cryotello”写的
你需要创建一个实体表示。
什么你可能会感兴趣的是这个项目之后有很好的解释 http://nerddinner.codeplex.com/
还不错的投资将是ASP.NET MVC 2本书由史蒂芬·桑德森
它涵盖负荷基本的东西
祝你好运