我有一个简单的表单,其中一个下拉列表和一个提交按钮。我有两个索引函数一个用于获取,一个用于表单帖子。当我从下拉列表中选择一个产品并单击提交按钮然后我的索引操作会被调用,但我注意到我的产品属性变为null。请看我的代码告诉我我犯了哪个错误。
@model AuthTest.Models.SampleViewModel
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>DateValTest</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Products, htmlAttributes: new { @class = "control-label col-md-2", style = "padding-top:0px;" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedProductId, new SelectList(Model.Products, "ID", "Name"), "-- Select Product--")
@Html.ValidationMessageFor(model => model.SelectedProductId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Submit" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
public class Product
{
public int ID { set; get; }
public string Name { set; get; }
}
public class SampleViewModel
{
[Display(Name = "Products")]
public List<Product> Products { set; get; }
[Required(ErrorMessage = "Select any one")]
public int SelectedProductId { set; get; }
}
public class TestValController : Controller
{
// GET: TestVal
public ActionResult Index()
{
var SampleVM = new SampleViewModel();
SampleVM.Products = new List<Product>
{
new Product{ ID=1, Name="IPhone" },
new Product{ ID=2, Name="MacBook Pro" },
new Product{ ID=3, Name="iPod" }
};
return View(SampleVM);
}
[HttpPost]
public ActionResult Index(SampleViewModel vm)
{
var SampleVM = new SampleViewModel();
SampleVM.Products = new List<Product>
{
new Product{ ID=1, Name="IPhone" },
new Product{ ID=2, Name="MacBook Pro" },
new Product{ ID=3, Name="iPod" }
};
if (ModelState.IsValid)
return View(vm);
else
return View(SampleVM);
}
}
当我调试第二个动作时,我看到vm products property getting null
请告诉我我犯了哪个错误?
感谢
答案 0 :(得分:0)
@Mou,
请修改您的剃刀视图并尝试此操作。 在Razor View中你没有指定Http动词(Get,Post)。
@using (Html.BeginForm("Index", "TestVal", FormMethod.Post)
答案 1 :(得分:0)
您没有犯任何错误,您没有收到产品列表,因为您没有将它们包含在HTML输入表单中。
如果要包含产品列表,可以在输入表单中添加以下内容
x = "Hello" & chrw$(29) & "World"
?x
HelloWorld
?left$(x, instr(x, chrw$(29)) - 1)
Hello