如何将视图中的输入数据传递给控制器

时间:2013-04-29 10:36:04

标签: asp.net-mvc razor devexpress

我是ASP.net MVC的新手,我使用DevExpress-MVC扩展来构建一个小型应用程序,一个使用DataGrid的员工时间注册。

我的问题如下:

用户可以输入他的名字的缩写,将其提交给控制器应该调用我的数据库查询并显示他的回复员工ID。

我让我的DataViewModel将我的模型传递给视图,现在我想将它绑定到文本框并从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来获取数字。 但是请求或视图模型都包含多个空引用。

但简单地说我无法将用户输入的表单传回控制器。

2 个答案:

答案 0 :(得分:0)

您只需将视图模型传递给控制器​​操作,模型绑定器将负责其余操作。然后,您可以访问这些属性并根据需要对其进行操作:

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

当您为POST操作方法定义MyErfassungViewModel参数(例如,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()
    {
    }
}

答案 1 :(得分:0)

最终引导我访问数据的解决方案在以下问题中提供

ASP.NET MVC Passing Data from View to Controller

对于我的解决方案,代码如下:

查看

    [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描述的自动应用响应数据到模型的舒适方式。