C# 将参数传递到操作中?
我试图完全理解如何简化以下内容:C# 将参数传递到操作中?,c#,asp.net-mvc,C#,Asp.net Mvc,我试图完全理解如何简化以下内容: public ActionResult Create(string ds) { InitializeServices(ds, "0000"); vm.Account = new Account { PartitionKey = "0000", RowKey = "0000", Create
public ActionResult Create(string ds) {
InitializeServices(ds, "0000");
vm.Account = new Account {
PartitionKey = "0000",
RowKey = "0000",
Created = DateTime.Now,
CreatedBy = User.Identity.Name
};
}
catch (ServiceException ex) {
ModelState.Merge(ex.Errors);
}
catch (Exception e) {
Trace.Write(e);
ModelState.AddModelError("", "Database access error: " + e.Message);
}
return View("CreateEdit", vm);
}
string ds
System.Web.Mvc.ModelState ModelState (passed as a reference)
我有几个很好的答案,建议如下:
private void HandleException(Action action) {
try {
action();
}
catch (ServiceException ex) {
ModelState.Merge(ex.Errors);
}
catch (Exception e)
{
Trace.Write(e);
ModelState.AddModelError("", "Database access error: " + e.Message);
}
}
RunAndHandleExceptions(new Action(() =>
{
//Do some computing }
));
这看起来是一个非常好的解决方案,但我仍然不明白如何通过我的考试
将参数转换为操作。我需要做的是通过以下考试:
public ActionResult Create(string ds) {
InitializeServices(ds, "0000");
vm.Account = new Account {
PartitionKey = "0000",
RowKey = "0000",
Created = DateTime.Now,
CreatedBy = User.Identity.Name
};
}
catch (ServiceException ex) {
ModelState.Merge(ex.Errors);
}
catch (Exception e) {
Trace.Write(e);
ModelState.AddModelError("", "Database access error: " + e.Message);
}
return View("CreateEdit", vm);
}
string ds
System.Web.Mvc.ModelState ModelState (passed as a reference)
只是
应该这样做
要获取返回值,您需要一个Func
,而不是Action
:
您最多可以定义16个参数的操作(如果该数字有用,请不要讨论)。所以,酸溜溜的电话可能看起来像:
private void HandleException(Action<string, System.Web.Mvc.ModelState ModelState > action) {
private void HandleException(操作){
编辑
下面是一个具有参数的操作的示例:
private void RunHandleException(Action<int> action)
{
action(someIntValue);
}
...
RunAndHandleExceptions((someInt) =>
{
//Do some computing
});
private void RunHandleException(操作)
{
动作(someIntValue);
}
...
RunAndHandleExceptions((someInt)=>
{
//做一些计算
});
下面是一个函数具有返回值的示例:
private void RunHandleException(Func<bool, int> action)
{
bool returnValue = action(someIntValue);
}
...
RunAndHandleExceptions((someInt) =>
{
//Do some computing
return true;
});
private void RunHandleException(函数操作)
{
bool returnValue=操作(someIntValue);
}
...
RunAndHandleExceptions((someInt)=>
{
//做一些计算
返回true;
});
您看过RedirectToAction吗
return this.RedirectToAction(c => c.SomeAction(MyParam));
我添加了mvc标记以使响应不那么奇怪:)注意捕获每个异常是一种糟糕的编程实践。调用堆栈中的某个成员可能已经能够处理该异常。我看到您正在使用“someFunction”。如果这是一个匿名函数,我怎么能给它编码呢?我一直在尝试这样做,但总是会遇到很多语法错误。@SamanthaJ:添加了一个例子,添加了我的答案的底部并修复了它(见注释)。请您澄清一下您的意思。我仍然很困惑:-(@SamanthaJ:我已经更改了我的答案,向您展示了一些示例代码。
return this.RedirectToAction(c => c.SomeAction(MyParam));