如何将输入数据从视图传递到控制器
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来获得一个数字。 但是请求或视图模型都包含多于一个空引用。
但简单地说我无法将用户输入从我的表单传递回控制器。
您只需将视图模型传递给控制器操作,模型联编程序将负责其余部分。然后,您可以访问这些属性,当你认为合适的与他们无关:
[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()
{
}
}
一个解决方案,最终导致我对我的数据的呈现以下问题
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具有描述的自动应用响应数据模型,舒适的方式。
[链接](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
听起来很棒,但如果我尝试这个,我会得到“没有为此对象定义的无参数构造函数”。我试图理解脚手架模板如何实现这一点,但从视图到控制器的连接对我来说仍然是某种魔术。我认为我在视图的第3行缺少一些内容:“@using(Html.BeginForm(”getNummer“,”MyErfassung“))” – PreDer 2013-04-29 11:31:32
你能发布整个堆栈跟踪吗? – 2013-04-29 11:33:12
http://pastie.org/private/d6ibepzfdczmgugmppr1q – PreDer 2013-04-29 11:38:15