Asp.net mvc 在MVC中从razor html视图执行控制器方法?
好的,我有一个Asp.net mvc 在MVC中从razor html视图执行控制器方法?,asp.net-mvc,html,html-select,Asp.net Mvc,Html,Html Select,好的,我有一个Html.DropDownList,我希望能够执行一个控制器方法ActionResult输出(字符串测试),并向它发送一个参数。我已经有类似的东西了,但是我得到了一个未捕获的TypeError:无法设置null消息的属性“action”: @Html.DropDownList( "revisions", ViewData["revisions"] as SelectList, new { onchange = "this.form.action = '/Shops/outp
Html.DropDownList
,我希望能够执行一个控制器方法ActionResult输出(字符串测试)
,并向它发送一个参数。我已经有类似的东西了,但是我得到了一个未捕获的TypeError:无法设置null消息的属性“action”:
@Html.DropDownList(
"revisions", ViewData["revisions"] as SelectList,
new
{
onchange = "this.form.action = '/Shops/output('test')'; this.form.submit();"
})
我如何着手修复我的代码
@Html.DropDownList(
"revisions", ViewData["revisions"] as SelectList,
new
{
onchange = "submitForm();"
})
您的Javascript在这里
function submitForm()
{
var form = document.forms[0];
form = '/Shops/output?test=test';
form.submit();
}
如果操作方法的参数名称为
id
public ActionResult output(string id)
{
//do something
}
然后您可以像这样使用表单操作url。(默认路由将处理rest)
如果您有不同的名称,请将其用作查询字符串
public ActionResult output(string name)
{
//do something
}
现在使用您的表单操作url,如
/Shops/output?name=somestringhere
关于代码的另一个建议是避免使用Viewdata呈现下拉列表。尝试使用强类型视图模型及其属性将数据传输到视图。另外,尝试将javascript从视图中移出,使其不受影响。这样您的视图只保留为干净的标记
假设要在“文档创建”视图中显示修订下拉列表,请向viewmodel中添加属性以显示下拉列表项
public class DocumentCreateViewModel
{
//Other properties also here
public List<SelectListItem> Revisions{ set;get;}
public int SelectedRevision { set;get;}
public DocumentCreateViewModel()
{
Revisions=new List<SelectListItem>();
}
}
在您的强类型视图中
@model DocumentCreateViewModel
@using(Html.Beginform())
{
@Html.DropDownListFor(x => x.SelectedRevision,
new SelectList(Model.Revisions,"Value","Text"), "Select..")
<input type="submit" />
}
您可以使用razor helper方法(
@url.Action
)来获得正确的路径,而不是将url硬编码为shops/output。谢谢,伙计,我对MVC还是个新手,还是个学生,但这种方法显然比礼仪和编程实践要好得多。当你创建下拉列表(你文章中最后的第二段)时,我不确定我是否理解视图中发生了什么?@barnacle.m:dropdownlistforhelper方法将在视图中呈现下拉列表。无论如何,欢迎来到ASP.NET MVC的精彩世界:)哈哈,谢谢。public ActionResult Create()是在我的控制器类中吗?您能解释一下为SelectList()设置的参数吗?请查看官方文档
public ActionResult Create()
{
var vm=new DocumentCreateViewModel();
vm.Revisions=GetRevisionItemsFromSomeWhere();
return View(vm);
}
@model DocumentCreateViewModel
@using(Html.Beginform())
{
@Html.DropDownListFor(x => x.SelectedRevision,
new SelectList(Model.Revisions,"Value","Text"), "Select..")
<input type="submit" />
}
$(function(){
$("#SelectedRevision").change(function(){
var _this=$(this);
var selectedRevision=_this.val();
$("form#YourFormIDHere")
.attr("action","./Shops/output/"+selectedRevision).submit();
});
});