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
的控制器,其中有一个actionAccountMainPage
,它接收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@ייםחדדדדדדדדדד哦,太好了!