2

私は ASP.net MVC を初めて使用し、DevExpress-MVC 拡張機能を使用して、DataGrid を使用する小さなアプリケーション (従業員の時間登録) を構築します。

私の問題は次のとおりです。

ユーザーは自分の名前の略語を入力できます。これをコントローラーに送信すると、DB へのクエリが呼び出され、応答する従業員 ID が表示されます。

DataViewModel にモデルをビューに渡すようにしましたが、それをテキスト ボックスにバインドし、ViewModel からデータを取得することでそれができると考えましたが、そうではありません。

私のコードは次のようになります:

ViewModel

    public class MyErfassungViewModel
{
    public MyErfassung erfassung;
    public String personalnummer;
    public String personalkuerzel;
    public List<String> dim1;
    public List<String> dim2;
    public List<String> dim3;
    public List<String> dim4;
    public List<String> dim5;

    public MyErfassungViewModel(MyErfassung myerfassung)
    {
        this.erfassung = myerfassung;
    }
}

意見

    @model DevExpressMvcApplication.Models.ViewModel.MyErfassungViewModel
    <div class ="Personalnummer">
    @using (Html.BeginForm("getNummer","MyErfassung"))
    {
        <label>Personalkürzel</label>
        @Html.DevExpress().TextBox(settings =>
        {
            settings.Name = "TextBoxPersonalkürzel";
        }).Bind(Model.personalkuerzel).GetHtml()

        <label>Personalnummer</label>

        @Html.DevExpress().TextBox(settings =>
        {
            settings.Name = "TextBoxPersonalnummer";
            settings.ReadOnly = true;
        }).Bind(Model.personalnummer).GetHtml()

        @Html.DevExpress().Button(settings =>
        {
            settings.Name = "TextBoxKuerzel";
            settings.Text = "Holen";
            settings.UseSubmitBehavior = true;
        }).GetHtml()
        <br>
    }
</div>

コントローラ

    //
    // GET: /MyErfassung/

    public ActionResult Index()
    {
        viewModel.personalkuerzel = "sese";
        return View(viewModel);
    }
    [HttpPost]
    public ActionResult getNummer()
    {
        String kurz = Convert.ToString(Request["TextBoxKuerzel"]);
        String nr = Convert.ToString(Request["TextBoxPersonalnummer"]);

        String nummer = dbRepo.getPersonalnummerByKuerzel(viewModel.personalkuerzel);
        viewModel.personalnummer = nummer;
        return View(viewModel);
    }

ご覧のとおり、ユーザー入力を受け取り、DB-Request を送信して番号を取得する方法をいくつか試しました。ただし、リクエストまたはビューモデルのいずれかに null 参照以上が含まれています。

しかし、単純に、フォームからコントローラーにユーザー入力を渡すことができないと言いました。

4

2 に答える 2

0

ビュー モデルをコントローラー アクションに渡すだけで、あとはモデル バインダーが処理します。次に、これらのプロパティにアクセスして、必要に応じて操作できます。

[HttpPost]
public ActionResult getNummer(MyErfassungViewModel viewModel)
{
    String nummer = dbRepo.getPersonalnummerByKuerzel(viewModel.personalkuerzel);
    ...
}

MyErfassungViewModelPOST アクション メソッドにパラメーター (たとえば、 と呼ばれる)を定義するとviewModel、ASP.NET MVC モデル バインダーは、ビューから取得したフォーム値を取得し、インスタンスを設定MyErfassingViewModelしてメソッドに渡します。

現時点では、getNummerメソッドのパラメーター リストは空であるため、ビュー モデルに渡す場所がありません。

更新:MyErfassungViewModelオーバーロードされたコンストラクターがあるため、モデル バインダーがインスタンス化できるように、既定のコンストラクターを追加する必要があります。

public class MyErfassungViewModel
{
    public MyErfassung erfassung;
    public String personalnummer;
    public String personalkuerzel;
    public List<String> dim1;
    public List<String> dim2;
    public List<String> dim3;
    public List<String> dim4;
    public List<String> dim5;

    public MyErfassungViewModel(MyErfassung myerfassung)
    {
        this.erfassung = myerfassung;
    }

    public MyErfassungViewModel()
    {
    }
}
于 2013-04-29T10:58:11.570 に答える
0

最終的にデータにたどり着いた解決策は、次の質問に示されています

ビューからコントローラーにデータを渡す ASP.NET MVC

私のソリューションでは、コードは次のようになり

ます。

    [HttpPost]
    public ActionResult getNummer()
    {
        String kurz = Convert.ToString(Request["personalkuerzel"]);
        String nr = Convert.ToString(Request["personalnummer"]);

        String nummer = dbRepo.getPersonalnummerByKuerzel(kurz);
        viewModel.personalnummer = nummer;
        return View(viewModel);
    }

残念ながら、このソリューションは、応答データをモデルに自動的に適用する Ant P が説明した快適な方法を使用していないようです。

于 2013-04-29T12:37:08.610 に答える