2

VisualStudio2010とMVC2.0を使用しています。

私のコントローラーには、ビューページcustomerDataAddからデータを選択するViewResultがあります。8つのフィールド(テキストボックス)があります。この8フィールドのget{}とset{}だけのモデルがあります。

問題は、送信ボタンのアクションで、ViewResultに移動し、model.Customerのオブジェクトを作成し、ビューからモデルプロパティにデータを挿入しようとして失敗することです。

エラーは次のとおりです。オブジェクト参照がオブジェクトのインスタンスに設定されていません。

以下に私のコードの一部を示します。

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()->エラーが表示される場所は2行目です。

[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>

MyCustomerDataAdd.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>
4

4 に答える 4

4

サーバーコントロールを使用する代わりに、次のようなhtmlヘルパーを使用できます。

  <% Html.EditorFor(m=>m.FirstName) %>
  <% Html.EditorFor(m=>m.LastName) %>

お役に立てれば。

于 2012-12-21T10:32:10.870 に答える
0

私はポイントを得ました。私はサーバー制御を使用しているので、このプロセスはサーバー制御から値を渡すための正しいプロセスではありません。htmlを使用する必要があります。しかし、これがなぜなのかわかりません。どなたかお答えいただければ幸いです。

私が使用した:

<input type="text" name="atxtFirstName" />

そしてこれはすべてのために働きます!

于 2012-12-21T10:22:33.107 に答える
0

投稿されたフォームに値がないように見えます

Request.Form["atxtFirstName"]

そのアクションに何が投稿されているかを確認する必要があります。たとえば、アクションにブレークポイントを設定してから、ブラウザーまたはVisualStudioで選択した投稿オブジェクトを確認します。

そのアクションのパラメーターとしてビューモデルを使用しない理由はありますか?

于 2012-12-21T09:29:32.383 に答える
0

これを試して:-

  [HttpPost]

        public ViewResult DisplayCustomer(FormCollection form)
        {
            Models.Customer customerView = new Models.Customer();  

            customerView.FirstName = form["atxtFirstName"].ToString();

            return View();
        }
于 2012-12-21T09:29:40.270 に答える