【问题标题】:How to send data from view to controller action in asp.net mvc?如何在asp.net mvc中将数据从视图发送到控制器操作?
【发布时间】:2014-03-07 18:10:07
【问题描述】:

我开发了一个自定义 HtmlHelper 扩展方法,但该数据不是 发布动作。

HtmlHelper 扩展类:

public static class TestHtmlHelper
{
    public static MvcHtmlString CreateControl(this HtmlHelper helper, string tagName, IDictionary<string, string> attributes)
    {
        var newTag = new TagBuilder(tagName);
        newTag.MergeAttributes(attributes, true);

        return  MvcHtmlString.Create(newTag.ToString(TagRenderMode.Normal));
    }

    public static string Image(this HtmlHelper helper, string id, string url, string alternateText, object htmlAttributes)
    {
        // Create tag builder
        var builder = new TagBuilder("img");

        // Create valid id
        builder.GenerateId(id);

        // Add attributes
        builder.MergeAttribute("src", url);
        builder.MergeAttribute("alt", alternateText);
        builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));

        // Render tag
        return builder.ToString(TagRenderMode.Normal);
    }

}

//查看代码

 @using (Html.BeginForm("Go","Home",FormMethod.Post))
{
    IDictionary<string, string> d = new Dictionary<string, string>();
    d.Add("type", "text");
    d.Add("id", "text1");
    d.Add("required", "required");
    @Html.Raw(Html.CreateControl("input", d))
    @Html.Raw(Html.Image("image1", "/Images/bullet.png", "bullet", new { border = "4px" }))
    d = null;
    d = new Dictionary<string, string>();
    d.Add("type", "submit");
    d.Add("value", "Go");
    @Html.Raw(Html.CreateControl("input", d))
    <span></span>
    d = null;
    d = new Dictionary<string, string>();
    d.Add("value", "text");
    d.Add("id", "span1");
    d.Add("text", "required");
    @Html.Raw(Html.CreateControl("span", d))
}

// 控制器代码

public ActionResult Index()
{
    ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

    return View();
}
[HttpPost]
public ActionResult Go(string test)
{
    return Content(test);
}

我在字符串测试中没有得到数据。我想将该数据提交给 DB。

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor


【解决方案1】:

要获取输入值作为 MVC 操作的参数,您需要为输入类型包含 NAME

  • 我没有在您的代码中看到任何输入类型的 NAME
  • 我也没有在您的代码中看到 TEST

例如,如果您的表单是 -

@using (Html.BeginForm("Submit","Ajax",FormMethod.Post))
{
    <input type="text" name="Rami"/>
    <input type="submit" value="Go"/>
}

输出截图 -

【讨论】:

  • 这是一张奇怪的截图。我以为他们在 SO 里面有 VS 调试器 :-)
  • @MalcolmFrexner,哈哈哈 :-)。更新了标题。
【解决方案2】:

将您的输入放在表单标签中。所有输入数据将在表单提交时发送到控制器。请看示例:

查看

@using (Html.BeginForm("Search", "Events"))
{
   @Html.TextBox("name")
   <input type="submit" value="Search" />
}

控制器

public class EventsController: Controller
{
   public ActionResult Search(string name)
   {
      //some operations goes here

      return View(); //return some view to the user
   }
}

如果您需要处理更复杂的类型,只需了解如何在 ASP.NET MVC 中使用模型。这是一个简短的例子:

剃须刀

@model UserModel

@using (Html.BeginForm("Search", "Events"))
{
   @Html.TextBoxFor(m => m.FirstName)
   @Html.TextBoxFor(m => m.LastName)
   <input type="submit" value="Search" />
}

控制器

public class EventsController: Controller
{
   public ActionResult Search(UserModel model)
   {
      //some operations goes here

      return View(); //return some view to the user
   }
}

模型 (C#)

public class UserModel
{
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 2020-08-22
    • 2014-08-18
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多