如何使用Url.Action将html文本框值发送到控制器动作方法输入参数?

时间:2016-12-06 12:55:34

标签: asp.net-mvc

我是asp.net mvc的新手,想要读取html文本框值并将其发送到控制器动作方法参数,为此目的在视图页面中写下此代码:

<a href="@Url.Action("Item", "Store", new {parentPartId = @item.Id,UserID=12})">@item.BookName</a>


在此段中的url action中:
UserID = html文本框值
读取值并将其发送到控制器中的此操作:

public ActionResult Item(int parentPartId,int UserID)
        {
}


在视图页面中我的文本框是这样的:

<input type="text" id="USERID"/>


我该如何解决这个问题?谢谢。

3 个答案:

答案 0 :(得分:1)

文本框值是动态的。这取决于用户输入。 Razor标签正在服务器上编译并发布到客户端。因此,您的剃刀代码无法理解用户将对您的文本区域执行的操作。您需要一个操作触发方法,包括确定文本框值并发送到服务器。您可以使用ajax功能。 有了Jquery的帮助。

我认为@item是一个循环变量。 你可以改变你的代码,如下所示

<a onClick="myFunction(@item.id)">@item.BookName</a>

如你所见,我抓住了id并输入了一个参数。 这是你的文字区域

<input type="text" id="USERID"/>

这是获取文本框值并将其发送到您的操作的javascript函数

function myFunction(id){
    var userId = document.getElementById("UserID").value;
    var data ={
        parentPartId:id,
        UserID:userId
    }

    $.ajax({          //Jquery stuff
            url : '/Store/Item'
            type:'POST',
            data:data
            dataType:'json'
            success:function(){//You can handle succes scenario}
        });
}

查看数据的结构,它是一个JSON对象。参数名称与您的操作参数相同。当你发送它。 MVC将理解逻辑并匹配参数和值。 )

答案 1 :(得分:1)

您可以处理超链接的click事件,并将文本框中的值注入其中,如下所示:

HTML:

<a class="BookName" href="" data-id="@item.Id">@item.BookName</a>

脚本(假设您有jQuery,但如果没有,则可轻松重写):

$(".BookName").click(function(event)
{
  event.preventDefault();
  var url = '@Url.Action("Item", "Store", new {parentPartId = "PARENT_ID",UserID="USER_ID"})';
  url = url.replace("USER_ID", $("#USERID").val());
  url = url.replace("PARENT_ID", $(this).data("id"));
alert(url); //just for debugging
  window.location.href = url;
});

在执行此操作之前,您可能希望检查输入值是否有效,但这可以帮助您入门。

答案 2 :(得分:0)

您需要通过模型/表单集合放置表单并发布数据

查看代码

@using (Html.BeginForm("SaveData", "TestCont", FormMethod.Post, new { Id = "frmTest", enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <input type="text" id="USERID" name="UserID"/>
}

控制器:

[HttpPost]
[ValidateInput(false)]
public ActionResult SaveData(FormCollection form)
{
    string html = Convert.ToString(form["UserID"]);
}

请务必标记[ValidateInput(false)]否则会在发布html时出现错误

您可以在表单中放置提交按钮进行发布,也可以在JavaScript中使用$('#frmTest').submit()