任何人都可以帮助我使用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" />
答案 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);