Javascript 模型数据未通过表单传播到控制器ASP.NET MVC4
我是ASP.NETMVC框架的新手,正在学习一门课程,以使自己能够快速掌握它。在这样做的过程中,我正在进行一个涵盖所有重要内容的项目,现在我遇到了问题: 我设置了一个页面,只需向客户端显示一些html内容,然后如果用户希望参与,他们可以单击按钮显示一个表单,然后使用该表单填写一些所需数据。以下是用于显示相应标记的javascript:Javascript 模型数据未通过表单传播到控制器ASP.NET MVC4,javascript,c#,asp.net-mvc-4,Javascript,C#,Asp.net Mvc 4,我是ASP.NETMVC框架的新手,正在学习一门课程,以使自己能够快速掌握它。在这样做的过程中,我正在进行一个涵盖所有重要内容的项目,现在我遇到了问题: 我设置了一个页面,只需向客户端显示一些html内容,然后如果用户希望参与,他们可以单击按钮显示一个表单,然后使用该表单填写一些所需数据。以下是用于显示相应标记的javascript: <script> $(document).ready(function(){ $("#btnOneWayTrip").click(function (
<script>
$(document).ready(function(){
$("#btnOneWayTrip").click(function () {
$("#TripFromPlaceHoler").show();
});
$("#TripFromPlaceHoler").hide();
});
以下是我的测试模型,它被多次引用:
public class TestTripClass
{
public string TripID { get; set; }
public string StartPoint { get; set; }
public string EndPoint { get; set; }
public DateTime StartTime { get; set; }
}
当我填写表单并按下submit按钮时,当我调试并检查“CreateOneWayTrip”ActionResult的参数时,只有一个空白模型返回,如上面代码中所示,该参数称为“model”。为什么会这样?欢迎分享任何建议,因为我是MVC新手
作为概述,以下是我的.cshtml文件中的代码:
@model TransNex.Models.TestTripClass
@{
ViewBag.Title = "Index";
}
<div class="row">
<div class="col-lg-6" id="TripFromPlaceHoler">
@using (Html.BeginForm("CreateOneWayTrip", "Trips"))
{
<fieldset>
<legend>Create One Way Trip</legend>
<div class="editor-label">
@Html.LabelFor(model => model.TripID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TripID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StartPoint)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.StartPoint)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.EndPoint)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.EndPoint)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StartTime)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.StartTime)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
</div>
</div>
<script>
$(document).ready(function(){
$("#btnOneWayTrip").click(function () {
$("#TripFromPlaceHoler").show();
});
$("#TripFromPlaceHoler").hide();
});
</script>
ASP.NET MVC模型绑定器在反序列化复杂类型方面不是很好。 您可以通过不同的方式来实现这一点: 一种方法是在表单上有一个隐藏元素,其名称为模型中的mising属性。 另一种方法是采用与复杂模型绑定相关的可用方法之一,为此,请查看以下复杂模型绑定页面:
问题是从局部视图创建视图。如果您直接在根页面上移动htmls,而不使用部分,则submit按钮将填充您的模型类。我找到了答案。不久前,通过在“共享”文件夹下创建“EditorTemplates”文件夹,为字符串值定义了自己的编辑器模板。该模板名为String.cshml,包含以下代码:
尝试更改参数名称。MVC有时会对这些事情感到困惑。现在就给它命名吧。看起来mvc无法反序列化您的模型。尝试用FormsCollection表单替换动作中的模型,看看它是否出现。@Frayt我更改了参数的名称,仍然没有骰子。@Aram使用FormCollection我必须知道控件的名称,Html.EditorFor生成的控件的名称是什么?你能发布它生成的网页的Html吗?
public class TestTripClass
{
public string TripID { get; set; }
public string StartPoint { get; set; }
public string EndPoint { get; set; }
public DateTime StartTime { get; set; }
}
@model TransNex.Models.TestTripClass
@{
ViewBag.Title = "Index";
}
<div class="row">
<div class="col-lg-6" id="TripFromPlaceHoler">
@using (Html.BeginForm("CreateOneWayTrip", "Trips"))
{
<fieldset>
<legend>Create One Way Trip</legend>
<div class="editor-label">
@Html.LabelFor(model => model.TripID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TripID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StartPoint)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.StartPoint)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.EndPoint)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.EndPoint)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.StartTime)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.StartTime)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
</div>
</div>
<script>
$(document).ready(function(){
$("#btnOneWayTrip").click(function () {
$("#TripFromPlaceHoler").show();
});
$("#TripFromPlaceHoler").hide();
});
</script>