【发布时间】:2013-12-17 21:22:24
【问题描述】:
我刚开始学习 ASP.NET MVC 中的 ViewModel。所以,我想实现一个示例如下:
商业实体
public class AddModel
{
public int a { get; set; }
public int b { get; set; }
public int Add()
{
return (this.a + this.b);
}
}
添加视图模型
public class AddViewModel
{
public AddModel addModel;
public int Total { get; set; }
}
控制器
public class AddController : Controller
{
[HttpPost]
public JsonResult Add(AddViewModel model)
{
int iSum = model.addModel.a + model.addModel.b;
model.Total = iSum;
return Json(model);
}
public ActionResult Index()
{
return View();
}
}
查看实施
@model ViewModelApplication.AddViewModel
<script type="text/javascript" src="../../Scripts/MicrosoftAjax.js"></script>
<script src="../../Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>
<script type="text/javascript">
function Callback(data) {
alert("I am sucess call");
}
function Failed() {
alert("I am a failure call");
}
</script>
@using (Ajax.BeginForm("Add", "Add", new AjaxOptions { OnSuccess = "Callback", OnFailure = "Failed" }))
{
<table align="center">
<tr>
<td class="tdCol1Align">
<label>
Number1</label>
</td>
<td class="tdCol2Align">
@Html.TextBoxFor(Model => Model.addModel.a)
</td>
</tr>
<tr>
<td class="tdCol1Align">
<label>
Number2</label>
</td>
<td class="tdCol2Align">
@Html.TextBoxFor(Model => Model.addModel.b)
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Add" class="button" />
</td>
</tr>
</table>
}
这里的问题是,每当单击Add 按钮时,我都无法检索输入到文本框中的值;对应的AJAX动作就是它了。
当我尝试访问 a 和 b 的值时,我得到的是空值,而不是输入到文本框中的值。
我不确定我哪里出错了。请帮忙。
【问题讨论】:
-
您看到表单集合中的预期值了吗?我不太确定,但是自从您进行 AJAX 回发以来,我相信您的模型在您进行回发时正在被序列化。控制器可能不再将其识别为视图模型,而是将其视为已发布值的集合。但同样,我不确定这是怎么回事..
-
@Rob..是的,我可以看到表单集合中的值
-
一般来说,将模型包含在 ViewModel 中并不是一个好主意。
-
@haim770..我同意你的看法..但是有什么替代方法..
标签: c# asp.net-mvc viewmodel asp.net-mvc-viewmodel