所以只想制作一个按钮,通过参数调用控制器操作。。。
我相信的一切都已就绪,但无法在actionlink帮助程序中配置/引用参数。。。
是的,一旦我完成了这个html助手的设置,我将重构我的按钮onclick。。。
<h1 style="font-size:30px">Enter The Core-i Product Key (format RST 102A08R EPCA 00007)</h1>
<form action="/action_page.php">
<label for="productKey">Product Key:</label>
<input type="text" id="productKey" name="productKey"><br><br>
</form>
<p>Click the "Get Key" button and a trial key will be generated custom to your IBMi hardware".</p>
<p>
@Html.ActionLink(
"Get Key",
"GetTrialKey", // controller action
"HomeController", // controller
new { productKey }, // IT DOES NOT LIKE PRODUCTKEY (REFERENCED ABOVE)
new { @class = "btn btn-info" }) // html attributes
</p>
<div class="display-2">
<a button class="text-center, btn btn-info form-control text-white" typeof="button" onclick="location.href='@Url.Action("GetTrialKey(productKey)")'">Get Key</button></a>
<p>
<br />
</p>
</div>
重构为…
查看。。。
<form action="HomeController/getTrialKey" method="POST">
<label for="productKey">Product Key:</label>
<input type="text" name="productKey" maxlength="22" value="xxx xxxxxxx xxxx xxxxx"><br><br>
<input type="submit" value="Get Trial Key" class="btn btn-primary" />
</form>
控制器。。。
[HttpPost]
public async Task<IActionResult> getTrialKey(string productKey)
{
当我运行它时,我会。。。
找不到此localhost页面找不到以下网址的网页:https://localhost:44346/HomeController/getTrialKey
返回其中一条注释:
我并没有阻止你使用HTML帮助程序。我只是说你构建表单和使用ActionLink
的方式是错误的。如果这是你唯一想发布回服务器的东西,那么在表单中输入产品密钥会更容易。
我强烈建议你仔细阅读微软的文档,至少这一份:https://dotnet.microsoft.com/apps/aspnet/mvc理解MVC是什么。从你的代码示例中,我根本没有看到你使用M - Model
。
无论如何,如果你只想获得用户键入的产品密钥,我会这样做:
定义控制器
我不喜欢把所有东西都放在家里(即HomeController
(。只要想想对用户有意义的页面的URL。
现在我猜你想做什么。我看到了产品密钥和试用密钥之类的术语。一个叫ProductKeyController
:的控制器怎么样
public class ProductKeyController : Controller
{
// This corresponds to /productkeys, and you can list all the product keys
// on the view it returns.
public ActionResult Index()
{
return View();
}
// This corresponds to /productkeys/create, and you can create a specific product
// key by asking the user to provide a trial key?
// The view this returns might be the page where you build the form
public ActionResult Create()
{
...
return View();
}
// This corresponds the form post.
[HttpPost]
public ActionResult Create(CreateProductKeyViewModel model)
{
...
return View(model);
}
}
视图模型
如果需要,MVC控制器负责获取数据,构建视图模型,并将其传递给视图。当您创建产品密钥时,如果您需要要求用户输入任何内容,您可以在其中声明一个模型和属性:
public class CreateProductKeyViewModel
{
[Required]
[Display(Name = "Trial Key")]
[MaxLength(22)]
public string TrialKey { get; set; }
}
视图创建.cshtml
因为您知道控制器将把视图模型传递给视图,所以您可以在视图的顶部声明它,这样您在视图中对视图模型所做的一切都是强类型的。
@model CreateProductViewModel
@{
Layout = "xxx";
}
<h1>Enter The Core-i Product Key (format RST 102A08R EPCA 00007)</h1>
@using(Html.BeginForm("create", "productKey", new { area = "" }, FormMethod.Post))
{
@Html.LabelFor(x => x.TrialKey)
@Html.TextBoxFor(x => x.TrialKey)
<button type="submit">Create</button>
}
查看视图中的所有内容是如何强类型化的?您不必手动创建表单和向用户请求试用密钥的输入。
当用户输入试用键并按下提交时,它将返回到Create
的post方法。由于视图是用视图模型声明的,并且视图模型是create方法的参数,MVC已经为您完成了模型绑定,因此您将获得用户在帖子中输入的内容。
这至少是让你开始的东西。
注意:所有东西都是我亲手写的。未经测试。