Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从asp.net MVC中发布的表单值填充模型_C#_Asp.net Mvc_Asp.net Mvc 3_Razor - Fatal编程技术网

C# 从asp.net MVC中发布的表单值填充模型

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

我有一个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 { 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
}
…然后我可以使用它将记录添加到我的数据库中(基本上是经销商在两个日期之间想要出租的汽车列表)

或者我试图从一个表单中获取搜索日期,然后用多个下拉列表填充同一表单,这样做太多了-有没有更好的方法:

  • 从日期框和夜数中搜索
  • 然后显示符合搜索条件的选项列表
  • 然后发布到服务器,并保存搜索数据(从日期、天数、dealerID)以及所选下拉列表,以及每个列表中选择的内容
  • 谢谢你,马克

    更新

    在Shyu的帮助下,我取得了一些进展-我添加了一个editortemplate:

    @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