Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 从另一个操作或另一个视图调用操作_Html_Asp.net Mvc_Asp.net Core Mvc - Fatal编程技术网

Html 从另一个操作或另一个视图调用操作

Html 从另一个操作或另一个视图调用操作,html,asp.net-mvc,asp.net-core-mvc,Html,Asp.net Mvc,Asp.net Core Mvc,我有一个名为DappAccount的控制器,其中有一个actionAccountMainPage,它接收class作为参数。在那里,我执行登录并创建返回的模型,直接进入AccountMainPage和Layout视图 在布局中,我有一个链接(atag),我想回调到AccountMainPage操作,但我不知道如何发回模型 以下是我尝试过的: [HttpPost] public async Task<IActionResult> AccountMainPage(DappAccount

我有一个名为
DappAccount
的控制器,其中有一个action
AccountMainPage
,它接收
class
作为参数。在那里,我执行登录并创建返回的模型,直接进入
AccountMainPage
Layout
视图

在布局中,我有一个链接(
a
tag),我想回调到
AccountMainPage
操作,但我不知道如何发回模型

以下是我尝试过的:

[HttpPost]
public async Task<IActionResult> AccountMainPage(DappAccount account) // here the login succeeded 
{ 
    bool IsValidated = account.CheckLogin(account.publicKey, account.privateKey);  
    if (!IsValidated)
        return RedirectToAction("Login", "Home");

    account.ConnectToBlockchain();

    // save this account in static controller property so the other controllers can read it
    myAccount = account;

    myAccount.OwnAssetsList = 
        await _context.Assets
            .FromSqlRaw("select * from Assets where OwnerPublicKey = {0}", account.publicKey)
            .ToListAsync();

    return View(account);
}

如何成功调用
AccountMainPage

您需要将AccountMainPage操作中的参数作为路由传递,因此请尝试以下操作

   <a id="assetsNavBar" class="nav-link" asp-area="" asp-controller="DappAccount" asp-action="AccountMainPage" asp-route-account="@new DappAccount(){}">Assets<span class="sr-only">(current)</span></a>
资产(当前)

请确保在{}中添加字段或传递一个已经可以访问的DappAccount对象

您需要将AccountMainPage操作中的参数作为路由传递,因此请尝试以下操作

   <a id="assetsNavBar" class="nav-link" asp-area="" asp-controller="DappAccount" asp-action="AccountMainPage" asp-route-account="@new DappAccount(){}">Assets<span class="sr-only">(current)</span></a>
资产(当前)

确保在{}中添加字段或传递一个已经可访问的DappAccount对象

如果我理解正确,您正试图使用
重定向到
POST
操作。但是,锚定标记和重定向都会发送
GET
request

您需要在
DappAccount
控制器中添加
GET
操作以返回
AccountMainPage
视图

[HttpGet]
public IActionResult AccountMainPage() 
{
   var account = ...;
   //get your account 
   return View(account)
}

如果我理解正确,您正试图使用
重定向到
POST
操作。但是,锚定标记和重定向都会发送
GET
request

您需要在
DappAccount
控制器中添加
GET
操作以返回
AccountMainPage
视图

[HttpGet]
public IActionResult AccountMainPage() 
{
   var account = ...;
   //get your account 
   return View(account)
}
感谢@Xing Zou:

[HttpGet]
[HttpPost]
public async Task<IActionResult> AccountMainPage(DappAccount account) //here the login succeeded , e initialized the key
{ 
    // so now call again to the login method in order to load more properties 
    bool IsValidated = account.CheckLogin(account.publicKey, account.privateKey); 
    if (!IsValidated)
        return RedirectToAction("Login", "Home");

    account.ConnectToBlockchain();

    // and save this account in static account so the other controllers be able to read it
    myAccount = account;

    myAccount.OwnAssetsList = await _context.Assets.FromSqlRaw("select * from Assets where OwnerPublicKey = {0}", account.publicKey).ToListAsync();

    return View(account);
}
[HttpGet]
[HttpPost]
public async Task AccountMainPage(DappAccount account)//此处登录成功,e初始化了密钥
{ 
//因此,现在再次调用login方法以加载更多属性
bool IsValidated=account.CheckLogin(account.publicKey,account.privateKey);
如果(!已验证)
返回重定向操作(“登录”、“主页”);
account.ConnectToBlockchain();
//并将此帐户保存在静态帐户中,以便其他控制器能够读取它
我的账户=账户;
myAccount.OwnAssetsList=await_context.Assets.FromSqlRaw(“从OwnerPublicKey={0}的资产中选择*,account.publicKey).ToListSync();
返回视图(帐户);
}
在布局视图中,感谢@user12376840:

<a id="assetsNavBar" class="nav-link" 
   asp-area="" asp-controller="DappAccount" asp-action="AccountMainPage" 
   asp-route-account.publicKey="@Model.publicKey" 
   asp-route-account.privateKey="@Model.privateKey">
    Assets<span class="sr-only">(current)</span>
</a>

资产(流动)
感谢@Xing Zou:

[HttpGet]
[HttpPost]
public async Task<IActionResult> AccountMainPage(DappAccount account) //here the login succeeded , e initialized the key
{ 
    // so now call again to the login method in order to load more properties 
    bool IsValidated = account.CheckLogin(account.publicKey, account.privateKey); 
    if (!IsValidated)
        return RedirectToAction("Login", "Home");

    account.ConnectToBlockchain();

    // and save this account in static account so the other controllers be able to read it
    myAccount = account;

    myAccount.OwnAssetsList = await _context.Assets.FromSqlRaw("select * from Assets where OwnerPublicKey = {0}", account.publicKey).ToListAsync();

    return View(account);
}
[HttpGet]
[HttpPost]
public async Task AccountMainPage(DappAccount account)//此处登录成功,e初始化了密钥
{ 
//因此,现在再次调用login方法以加载更多属性
bool IsValidated=account.CheckLogin(account.publicKey,account.privateKey);
如果(!已验证)
返回重定向操作(“登录”、“主页”);
account.ConnectToBlockchain();
//并将此帐户保存在静态帐户中,以便其他控制器能够读取它
我的账户=账户;
myAccount.OwnAssetsList=await_context.Assets.FromSqlRaw(“从OwnerPublicKey={0}的资产中选择*,account.publicKey).ToListSync();
返回视图(帐户);
}
在布局视图中,感谢@user12376840:

<a id="assetsNavBar" class="nav-link" 
   asp-area="" asp-controller="DappAccount" asp-action="AccountMainPage" 
   asp-route-account.publicKey="@Model.publicKey" 
   asp-route-account.privateKey="@Model.privateKey">
    Assets<span class="sr-only">(current)</span>
</a>

资产(流动)

我可以通过重复代码来克服这个问题,但他的不是我想要的,你不能发送带有锚标记的对象,是的,你可以发送对象,但属性不会使用asp路由填充-{your action method argument name}=“@Model”。你可以使用form和bind with model创建post或get请求,然后你将拥有object in action方法。我可以通过重复代码来克服这个问题,但他不是我想的那样,你不能发送带有锚定标记的对象,是的,你可以发送对象,但属性不会使用asp路由填充-{你的action方法参数名称}=“@Model”。你可以使用form和绑定Model,创建post或get请求,然后你就可以使用object-in-action方法了。那么[HttpPost]呢?你是什么意思?你不能重定向到Post操作。你能更清楚地说明
不发送回模式吗`在你的问题中,模型是什么,你想发送回哪里?模型是DappAccount,在我的[HttpPost]控制器中从一开始,为了从登录视图传递数据,我现在也为链接添加了[HttpGet],正如你所建议的,它是有效的,但操作没有得到参数。现在就开始。无论如何,我解决了这个问题,感谢你和@user12376840@•ייםחדדדדדדדדדדדדדדד?你是什么意思?你不能重定向到Post操作。你能更清楚地说明
不发送回模式吗`在你的问题中,模型是什么,你想发送回哪里?模型是DappAccount,在我的[HttpPost]控制器中从一开始,为了从登录视图传递数据,我现在也为链接添加了[HttpGet],正如你所建议的,它是有效的,但操作没有得到参数。现在就开始工作。无论如何,我解决了这个问题,感谢你和@user12376840@•ייםחדדדדדדדדדד哦,太好了!