.net mvc html帮助ActionLink和控制器类的参数



所以只想制作一个按钮,通过参数调用控制器操作。。。

我相信的一切都已就绪,但无法在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已经为您完成了模型绑定,因此您将获得用户在帖子中输入的内容。

这至少是让你开始的东西。

注意:所有东西都是我亲手写的。未经测试。

相关内容

  • 没有找到相关文章

最新更新