我不知道这是否是正确的做法,但我使用的是 Jquery 和 MVC2。我正在使用 $.ajax 方法来回调控制器以在文本框的 .blur 上执行一些业务逻辑。
我有两个视图,它们基本上对公共数据做同样的事情,但使用不同的模型。他们都使用相同的控制器。用代码解释可能更容易:
所以这里有两个模型:
public class RecordModel {
public string RecordID { get; set; }
public string OtherProperties { get; set; }
}
public class SecondaryModel {
public string RecordID { get; set; }
public string OtherPropertiesDifferentThanOtherModel { get; set; }
}
这些模型有两个强类型视图。一个是RecordModel,另一个是SecondaryModel。
现在在这些视图上是通过以下方式创建的 input="text":
<%= Html.TextBoxFor(model => model.RecordID) %>
有 jQuery javascript 将 .blur 方法绑定到调用:
<script>
$('#RecordID').blur(function() {
var data = new Object();
data.RecordID = $('#RecordID').val();
// Any other stuff needed
$.ajax({
url: '/Controller/ValidateRecordID',
type: 'post',
dataType: 'json',
data: data,
success: function(result) {
alert('success: ' + result);
},
error: function(result) {
alert('failed');
}
});
}
</script>
控制器看起来像:
[HttpPost]
public ActionResult ValidateRecordID(RecordModel model) {
// TODO: Do some verification code here
return this.Json("Validated.");
}
现在,如果我在控制器中为使用 RecordModel 的视图显式命名 RecordModel,这将正常工作。但是,SecondaryModel 视图也尝试调用此函数,但它失败了,因为它需要的是 RecordModel 而不是 SecondaryModel。
所以我的问题是这个。两个不同的强类型视图如何在控制器中使用相同的 Action 并且仍然遵守建模模式?我已经尝试过抽象类和接口(并更改视图页面以使用接口/抽象类),但它仍然失败。
有什么帮助吗?并为帖子的稳健性感到抱歉......
谢谢。