如何从sql server获取选择框中的值

时间:2015-12-17 19:03:20

标签: asp.net-mvc database select

任何人都可以帮助我使用sql server中的值填充选择框。我使用的是MVC ASP.NET,我有一个表格,来自表格X,其中一个列称为“位置”,并将城市带到了其中,但我拥有所有另一个表Y中的城市,并希望在该表单中插入选择。我该如何在模型/控制器中输入代码。

以下是我为表格X设置表单的方式:

型号:

public int Insertar(Inmueble inmueble)
        {
            SqlConnection conexion = new SqlConnection("Data Source=USUARIO-PC\\SQLEXPRESS;Integrated Security=True;Initial Catalog=jaera;");

            conexion.Open();

        SqlCommand comando = conexion.CreateCommand();
        comando.CommandText = "insert into Inmuebles (Titulo, Descripcion, Ambientes, Precio, Localidad, Tags, Usuario)" +
            "output inserted.Id values (@Titulo, @Descripcion, @Ambientes, @Precio, @Localidad, @Tags, @Usuario)";
        comando.Parameters.AddWithValue("@Titulo", inmueble.Titulo);
        comando.Parameters.AddWithValue("@Descripcion", inmueble.Descripcion);
        comando.Parameters.AddWithValue("@Ambientes", inmueble.Ambientes);
        comando.Parameters.AddWithValue("@Precio", inmueble.Precio);
        comando.Parameters.AddWithValue("@Localidad", inmueble.Localidad);
        comando.Parameters.AddWithValue("@Tags", inmueble.Tags);
        comando.Parameters.AddWithValue("@Usuario", inmueble.Usuario);

        int nuevoId = (int)comando.ExecuteScalar();
        inmueble.Id = nuevoId;

        conexion.Close();

        return nuevoId;
    }

这是我的控制者:

[HttpPost]
    public ActionResult Create(FormCollection formulario)
    {
        string Titulo = formulario["Titulo"];
        string Descripcion = formulario["Descripcion"];
        int Precio = Convert.ToInt32(formulario["Precio"]);
        int Ambientes = Convert.ToInt32(formulario["Ambientes"]);
        int Localidad = Convert.ToInt32(formulario["Localidad"]);
        string Usuario = formulario["Usuario"];
        string Tags = formulario["Tags"];

        Inmueble inmueble = new Inmueble();
        inmueble.Titulo = Titulo;
        inmueble.Localidad = Localidad;
        inmueble.Precio = Precio;
        inmueble.Ambientes = Ambientes;
        inmueble.Usuario = Usuario;
        inmueble.Descripcion = Descripcion;
        inmueble.Tags = Tags;

        InmueblesManager managerInmuebles = new InmueblesManager();
        int idInsertado = managerInmuebles.Insertar(inmueble);

        if (Request.Files.Count > 0 &&
            Request.Files[0].ContentLength > 0) //para validar que vino el archivo
        {
            string rutaFinal = Server.MapPath("~/Content/imagenes/inmuebles/" + idInsertado + ".jpg");
            Request.Files[0].SaveAs(rutaFinal);
        }

        return RedirectToAction("Index", "Home");
    }

这就是它看待html代码的形式:

<form action="@Url.Action("Create", "Inmuebles")" method="post" enctype="multipart/form-data">
<div class="form-group">
    <label for="Titulo">Titulo</label>
    <input id="Titulo" name="Titulo" type="text" placeholder="Titulo" />
</div>
<div class="form-group">
    <label for="Localidad">Localidad</label>
    <input id="Localidad" name="Localidad" type="text" placeholder="Localidad del Inmueble" />
</div>
<div class="form-group">
    <label for="Descripcion">Descripcion</label>
    <textarea id="Descripcion" name="Descripcion" placeholder="Ingresa aqui la descripcion"></textarea>
</div>
<div class="form-group">
    <label for="Precio">Precio</label>
    <input type="number" id="Precio" name="Precio" />
</div>
<div class="form-group">
    <label for="Ambientes">Ambientes</label>
    <input type="number" id="Ambientes" name="Ambientes" />
</div>
<div class="form-group">
    <label for="Tags">Tags</label>
    <input id="Tags" name="Tags" type="text" placeholder="Tags para una busqueda mas rapida" />
</div>
<div>
    <input type="hidden" value="@(((ja_era.Models.Usuario)Session["usuario"]).NombreDeUsuario)" name="Usuario" />
</div>
<div class="form-group">
    <label for="imagen">Imagen</label>
    <input id="imagen" name="imagen" type="file" />
</div>
<input type="submit" value="Guardar" />

1 个答案:

答案 0 :(得分:1)

你甚至没有尝试任何东西,这些都是围绕这些部分的禁忌。不过,我会给你一些一般指导。首先,使用视图模型将数据传入/传出视图。你几乎不应该使用FormCollection

public class InmuebleViewModel
{
    public string Titulo { get; set; }
    public int Localidad { get; set; }
    public int Precio { get; set; }
    public int Ambientes { get; set; }
    public string Usuario { get; set; }
    public string Descripcion { get; set; }
    public string Tags { get; set; }
}

然后,你的get动作应该将它传递给你的视图:

public ActionResult Create()
{
    var model = new InmuebleViewModel();
    return View(model);
}

您的视图应使用此模型并利用HTML帮助程序生成输入:

@model Namespace.To.InmuebleViewModel

...

<div class="form-group">
    @Html.LabelFor(m => m.Titulo)
    @Html.EditorFor(m => m.Titulo, new { htmlAttributes = new { placeholder = "Titulo" } })
</div>

...

最后,您的帖子操作应该将此视图模型作为参数:

[HttpPost]
public ActionResult Create(InmuebleViewModel model)
{
    ...
}

这些只是标准的MVC最佳实践内容。但是,使用视图模型还可以在其上显示选择列表:

public IEnumerable<SelectListItem> FooOptions { get; set; }

然后您可以在视图中使用

@Html.DropDownListFor(m => m.Foo, Model.FooOptions)

您只需要在中填充该属性您的get和post操作。为此,我建议为您的控制器添加一个受保护的方法,它们都可以调用以保持干燥:

protected void PopulateFooOptions(InmeubleViewModel model)
{
    // retrieve you options from the database, selected into an enumerable of `SelectListItem`
    model.FooOptions = options;
}

然后,你的get和post Create动作都会在返回视图之前调用它:

PopulateFooOptions(model);
return View(model);