在视图控制器中添加剃刀变量?

时间:2018-12-17 21:26:48

标签: c# html asp.net-mvc razor

我想知道是否可以在视图控制器中调用razor变量?

基本上,我正在尝试从此视频中复制该过程,但有一些不同:https://www.youtube.com/watch?v=P7i1G6CeOiI

例如,我正在建立一个网站,该网站从表单中获取文本输入并将其通过电子邮件发送到中央电子邮件地址。在html页面上构建表单后,然后我使用剃刀创建一个等于每个输入框的变量

例如:

<input class="input" type="text" name="inputOne" />

@{
 var input1 = Request["inputOne"];
}

从那里,我创建了一个字符串,它将所有变量放在一起以创建电子邮件的消息正文。

例如:

string messageBody = "input one: " + input1 + "input two: " + input2 + ect.ect.ect.;

现在这是我有点迷路的地方。在上面的视频中,讲师的方式是对电子邮件中发送的消息进行硬编码。显然,在我的情况下,这是行不通的,因为消息正文依赖于用户输入。我认为调用“ messageBody”字符串将很容易,而且就是那样-显然不是。 “名称'messageBody'在当前上下文中不存在”。我想知道究竟如何或是否可以在控制器中调用“ messageBody”字符串?也许完全不同的方法更适合我的需求?

1 个答案:

答案 0 :(得分:0)

创建两个操作,这些操作将返回Controller内部的Views。一种用于GET,一种用于POST。

加上创建要使用的模型,您的模型应具有InputOne属性,如下所示:

public class RegisterViewModel
{
    public string InputOne { get; set; }
}

动作:

[HttpGet]
public ActionResult Example()
    {
        var model = new ExampleViewModel();
        return View(model);
    }

[HttpPost]
public ActionResult Example(ExampleViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // Process the model as you wish...

        return RedirectToAction(nameof(AnotherAction));
    }

创建相应的视图(Views文件夹/YourControllerName/Example.cshtml) 在视图中包括您的viewmodel,并实现以下形式:

@model YourProjectName.Project.Models.ExampleViewModel

<div>
    @using (Html.BeginForm("Example", "YourController", FormMethod.Post))
    {
        @Html.TextBoxFor(model => model.InputOne)

        <input type="submit" value="Submit">
    }
</div>

希望这会有所帮助!