C# 从asp.net MVC中发布的表单值填充模型
我有一个SearchViewModel:C# 从asp.net MVC中发布的表单值填充模型,c#,asp.net-mvc,asp.net-mvc-3,razor,C#,Asp.net Mvc,Asp.net Mvc 3,Razor,我有一个SearchViewModel: public class SearchViewModel { [Required] public DateTime From { get; set; } [Required] public int Days { get; set; } public long DealerID { get; set; } public IQueryable<TypesAvail> TypesAvails { ge
public class SearchViewModel
{
[Required]
public DateTime From { get; set; }
[Required]
public int Days { get; set; }
public long DealerID { get; set; }
public IQueryable<TypesAvail> TypesAvails { get; set; }
}
返回服务器的第二篇文章显示:
From=07%2F08%2F2012+00%3A00%3A00& Nights=1 & DealerID=1 &
item.TypeID=3059 & item.NumSelected=3 &
item.TypeID=3103 & item.NumSelected=2 &
item.TypeID=3170 & item.NumSelected=7 &
item.TypeID=3212 & item.NumSelected=4
用于显示这些内容的Razor没有将TypeID分配到每个内容的下拉列表中:
@Html.HiddenFor(modelItem => item.TypeID)
@Html.DropDownListFor(modelItem => item.NumSelected, item.CarsAvail)
我的问题是,在文章中,模型(TypesAvail显示为NULL)是否有任何方法可以表示下拉列表中的选定项,直接在回发时显示到ViewModel中
如果没有,我如何循环表单字段以创建另一个模型-该模型将具有:
From
Days
DealerID
{
TypeID = 3059, NumSelected = 3,
TypeID = 3103, NumSelected = 2,
TypeID = 3170, NumSelected = 7,
TypeID = 3212, NumSelected = 4
}
…然后我可以使用它将记录添加到我的数据库中(基本上是经销商在两个日期之间想要出租的汽车列表)
或者我试图从一个表单中获取搜索日期,然后用多个下拉列表填充同一表单,这样做太多了-有没有更好的方法:
@model ebm2.Models.TypesAvail
@Html.DropDownListFor(modelItem => modelItem.NumSelected, Model.CarsAvail)
…并在视图中以以下方式呈现:
@Html.EditorFor(model=>model.TypesAvails)
但是,当我随后将表单发布回控制器时(添加editorTemplate后),我收到以下消息:
[MissingMethodException: Cannot create an instance of an interface.]
我假设这意味着它不再识别模型-这是因为EditorTemplate吗
我的发回然后添加到ViewModel的方法是实现这一点的最佳方法吗?还是您建议使用jQuery/Ajax在客户端完成这一过程,并且只有在我拥有模型的完整JSON对象时才最终发回服务器
如果您能给我一些指导,我将不胜感激
谢谢,马克使用编辑模板 创建一个名为“EditorTemplates”的文件夹,并创建一个名为
TypesAvail.cshtml
现在将以下代码添加到此新视图
@model TypesAvail
<p>
@Html.DropDownListFor(modelItem => item.NumSelected, item.CarsAvail)
</p>
试一试
FormView是另一个用于处理记录的asp.net控件,它使您能够处理来自数据源的单个记录,类似于DetailsView控件。您好-谢谢-我在视图中用您的HTML帮助程序替换我的HTML帮助程序时出错:“已存在与此命令关联的打开的DataReader,必须先关闭该命令。“-谢谢,@fixit:应该与您读取数据的方式有关。确保在数据访问代码中关闭DataReader。嗨@Shyju-我没有使用任何虚构的东西来访问数据-只是开箱即用的代码。我已经将我的控制器添加到我原来的帖子中。这就是导致这个错误的原因吗?谢谢你,马克
@Html.EditorFor(model=>model.TypesAvails)
[MissingMethodException: Cannot create an instance of an interface.]
@model TypesAvail
<p>
@Html.DropDownListFor(modelItem => item.NumSelected, item.CarsAvail)
</p>
@model ebm2.ViewModels.SearchViewModel
<h2>CarList</h2>
@using (Html.BeginForm())
{
<p>Put other elements also </p>
@Html.EditorFor(x=>x.TypesAvails)
<input type="submit" value="Save" />
}
Dim strcon As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=D:\webarticles\App_Data\mydatabase.mdf;Integrated Security=True;User Instance=True"
Dim con As New SqlConnection(strcon)
con.Open()
Dim da As SqlDataAdapter
Dim ds As New DataSet
Dim sqlstring As String = "SELECT * FROM tblstudent "
da = New SqlDataAdapter(sqlstring, con)
da.Fill(ds)
FormView1.DataSource = ds.Tables(0)
FormView1.DataBind()
Label1.Text = "Formview is filled"
Catch ex As Exception
Label1.Text = "There is Some Error"
End Try