在我的控制器中,我总是得到类似的东西:
[HttpPost]
public ActionResult General(GeneralSettingsInfo model)
{
try
{
if (ModelState.IsValid)
{
// Upload database
db.UpdateSettingsGeneral(model, currentUser.UserId);
this.GlobalErrorMessage.Type = ErrorMessageToViewType.success;
}
else
{
this.GlobalErrorMessage.Type = ErrorMessageToViewType.alert;
this.GlobalErrorMessage.Message = "Invalid data, please try again.";
}
}
catch (Exception ex)
{
if (ex.InnerException != null)
while (ex.InnerException != null)
ex = ex.InnerException;
this.GlobalErrorMessage.Type = ErrorMessageToViewType.error;
this.GlobalErrorMessage.Message = this.ParseExceptionMessage(ex.Message);
}
this.GlobalErrorMessage.ShowInView = true;
TempData["Post-data"] = this.GlobalErrorMessage;
return RedirectToAction("General");
}
我想做的事情会是这样的:
[HttpPost]
public ActionResult General(GeneralSettingsInfo model)
{
saveModelIntoDatabase(
ModelState,
db.UpdateSettingsGeneral(model, currentUser.UserId)
);
return RedirectToAction("General");
}
如何将函数作为参数传递?就像我们在javascript中一样:
saveModelIntoDatabase(ModelState, function() {
db.UpdateSettingsGeneral(model, currentUser.UserId)
});
答案 0 :(得分:3)
听起来你想要一个委托。对我来说,你的代表类型应该在这里并不是很明显 - 可能只是Action
:
SaveModelIntoDatabase(ModelState,
() => db.UpdateSettingsGeneral(model, currentUser.UserId));
SaveModelIntoDatabase
的位置:
public void SaveModelIntoDatabase(ModelState state, Action action)
{
// Do stuff...
// Call the action
action();
}
如果您希望函数返回某些内容,请使用Func
;如果您需要额外的参数,只需将它们添加为类型参数 - 有Action
,Action<T>
,Action<T1, T2>
等。
如果你是新来的代表,我强烈建议在进一步学习C#之前先熟悉它们 - 它们非常方便,是现代惯用语C#的重要组成部分。网上有很多关于它们的内容,包括: