2013-04-29 190 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

相關問題