2013-04-29 189 views
2

Im新的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来获得一个数字。 但是请求或视图模型都包含多于一个空引用。

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

回答

0

您只需将视图模型传递给控制器​​操作,模型联编程序将负责其余部分。然后,您可以访问这些属性,当你认为合适的与他们无关:

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

当你定义一个MyErfassungViewModel参数(称为例如,viewModel)到您的POST操作方法,在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() 
    { 
    } 
} 
+0

听起来很棒,但如果我尝试这个,我会得到“没有为此对象定义的无参数构造函数”。我试图理解脚手架模板如何实现这一点,但从视图到控制器的连接对我来说仍然是某种魔术。我认为我在视图的第3行缺少一些内容:“@using(Html.BeginForm(”getNummer“,”MyErfassung“))” – PreDer 2013-04-29 11:31:32

+0

你能发布整个堆栈跟踪吗? – 2013-04-29 11:33:12

+0

http://pastie.org/private/d6ibepzfdczmgugmppr1q – PreDer 2013-04-29 11:38:15

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

+0

[链接](http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx)上述解决方案不是这样你应该这样做,访问链接,看看如何正确绑定。 – PreDer 2013-05-02 08:27:01