我正在使用 Visual Studio 2010 和 mvc 2.0。
在我的控制器中,我有一个ViewResult,它从视图页面 customerDataAdd 中选择数据。有8个字段(文本框)。我有一个模型,只有这个8字段的get {}和set {}。
问题是,在提交按钮的操作中,它转到ViewResult,创建model.Customer的对象,尝试将视图中的数据插入到models属性中并失败。
错误是:对象引用未设置为对象的实例。
以下是我的一些代码:
Customer.cs-模型类
private string _FirstName;
public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}
private string _LastName;
public string LastName
{......}
private string _Street;
public string Street
{......}
private string _Village;
public string Village
{......}
private string _Thana;
public string Thana
{......}
private string _District;
public string District
{......}
private string _Division;
public string Division
{......}
private string _Country;
public string Country
{......}
CustomerController.cs - > ViewResul DisplayCustomer() - >错误显示在第二行的位置。
[HttpPost]
public ViewResult DisplayCustomer()
{
Models.Customer customerView = new Models.Customer(); //all customerview properties are null??
**customerView.FirstName = Request.Form["atxtFirstName"].ToString();** //firstname gets null??
customerView.LastName = Request.Form["atxtLastName"].ToString();
customerView.Street = Request.Form["atxtStreet"].ToString();
customerView.Village = Request.Form["atxtVillage"].ToString();
customerView.Thana = Request.Form["atxtThana"].ToString();
customerView.District = Request.Form["atxtDistrict"].ToString();
customerView.Division = Request.Form["atxtDivision"].ToString();
customerView.Country = Request.Form["atxtCountry"].ToString();
return View();
}
[编辑-1] 我的形式[“atxtFirstName”]的值.ToString() = null 显示。我已经用 FormCollection 编辑了它。
[编辑-2]
这是我的 DisplayCustomer.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SimpleExample.Models.Customer>" %>
DisplayCustomer
<h2>DisplayCustomer</h2>
<div>
<table runat="server" width="30%">
<tr>
<td width="30%">Customer Name: </td>
<td><%= Model.FirstName + " " + Model.LastName %></td>
</tr>
<tr>
<td>Customer Address: </td>
<td><%= Model.Street + ", " + Model.Village + ", " + Model.Thana + ", <br/>" + Model.District + ", " + Model.Division + ", " + Model.Country %></td>
</tr>
</table>
</div>
我的 CustomerDataAdd.aspx - 此处仅提供表单。
<form id="afrmCustomer" runat="server" action="DisplayCustomer" method="post">
<table width="30%">
<tr>
<td width="30%">
<asp:Label ID="Label8" Text="First Name:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtFirstName" runat="server" />
</td>
<td width="30%">
<asp:Label ID="Label1" Text="Last Name:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtLastName" runat="server" />
</td>
</tr>
<tr>
<td width="30%">
<asp:Label ID="Label2" Text="Street:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtStreet" runat="server" />
</td>
<td width="30%">
<asp:Label ID="Label7" Text="Village:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtVillage" runat="server" />
</td>
</tr>
<tr>
<td width="30%">
<asp:Label ID="Label3" Text="Thana / Upazilla:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtThana" runat="server" />
</td>
<td width="30%">
<asp:Label ID="Label6" Text="District:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtDistrict" runat="server" />
</td>
</tr>
<tr>
<td width="30%">
<asp:Label ID="Label4" Text="Division:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtDivision" runat="server" />
</td>
<td width="30%">
<asp:Label ID="Label5" Text="Country:" runat="server" />
</td>
<td>
<asp:TextBox name="atxtCountry" runat="server" />
</td>
</tr>
<tr>
<td width="30%">
</td>
<td>
<asp:Button name="abtnSubmit" Text="Submit" runat="server" />
</td>
<td width="30%">
</td>
<td>
</td>
</tr>
</table>
</form>
答案 0 :(得分:4)
您可以使用html helper,而不是使用服务器控件:
<% Html.EditorFor(m=>m.FirstName) %>
<% Html.EditorFor(m=>m.LastName) %>
希望这会有所帮助。
答案 1 :(得分:0)
似乎价值不在您的表单中
Request.Form["atxtFirstName"]
您应该检查发布到该操作的内容。例如,在操作中放置一个断点,然后在浏览器或visual studio中查看post对象,这是您的选择。
您不会将viewmodel用作该操作的参数吗?
答案 2 :(得分:0)
试试这个: -
[HttpPost]
public ViewResult DisplayCustomer(FormCollection form)
{
Models.Customer customerView = new Models.Customer();
customerView.FirstName = form["atxtFirstName"].ToString();
return View();
}
答案 3 :(得分:0)
我明白了。因为我正在使用服务器控件这个过程不是从服务器控件传递值的正确过程。 我只需要使用html 。但我不知道为什么会这样。如果有人能回答,我将不胜感激。
我用过:
<input type="text" name="atxtFirstName" />
这适用于所有人!