我是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"/>
我该如何解决这个问题?谢谢。
答案 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()