2011-08-20 31 views
0

我想在使用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相同的值,但没有奏效。

谢谢!

回答

1

从窗体中删除runat="server",这在MVC中完全不需要。你也不应该使用表单集合,应该使用模型绑定。摆脱<asp:*>控件,它们在MVC中是无用的。

相反,使用HTML辅助<%: Html.TextBoxFor(m => model.property) %>

它更容易使用提供Html.BeginForm()帮手,因为这样的:

<%: using (Html.BeginForm()) { %> 
    .... your stuff 
<%: } %> 

在重读,我看到您的问题是,您使用的形式一个标准的asp.net页面的设计器,而不是一个MVC页面。

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”模型......这是它的命名空间,你会在添加到继承属性模型第一行(在尖括号之间)。

您所犯的错误是使用传统的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。

在这里很受同化,但我的建议再次是通过教程抓住基础知识。你不会后悔的。

0

你的设计师已经做了什么创建HTML标记为在网页形式中使用,而不是在MVC。 你需要的东西就像“cryotello”写的

你需要创建一个实体表示。

什么你可能会感兴趣的是这个项目之后有很好的解释 http://nerddinner.codeplex.com/

还不错的投资将是ASP.NET MVC 2本书由史蒂芬·桑德森

它涵盖负荷基本的东西

祝你好运

相关问题