我是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 :(得分: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描述的自动应用响应数据到模型的舒适方式。