私はいくつかの類似のポストを見つけましたが、少しの助けなしにそれを解決する方法は見つかりませんでした(他の投稿には不完全な日付があります)。asp.net MVCのデータベースからドロップダウンリストをフォームに入れます
私は、データベースからの値(表示名ですが、値としてのキーIDを保持する)を持つドロップダウンリストを表示する必要があるページがあります。このリストには、フォームの他のタイプの入力があります。
マイモデル:おそらく、ドロップダウンリストを読み込む必要があります
public class AddOfferAnnounceModel
{
public AnnounceTypeList AnnounceTypeList {get; set; }
public int Surface { get; set; }
public int SubTypeId { get; set; }
[Required]
public decimal Price { get; set; }
[StringLength(200, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 0)]
public string AnnounceDetails { get; set; }
public bool Net { get; set; }
}
public class AnnounceTypeList
{
public int SubTypeId { get; set; }
public string TypeDesc { get; set; }
}
マイコントローラー[HTTPGET]アクション(:
// GET: Announce/Add new announce
public ActionResult AddOffer()
{
string sql = "select typeId, typeDesc from announceTypes where parentTypeId = 1";
using (SqlConnection cn = new SqlConnection(ConnectionString))
{
cn.Open();
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(sql, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
var apartmentTypeList = new List<AnnounceTypeList>();
foreach (DataRow dr in dt.Rows)
{
var apartmentType = new AnnounceTypeList
{
SubTypeId = Convert.ToInt32(dr["TypeId"]),
TypeDesc = dr["TypeDesc"].ToString()
};
apartmentTypeList.Add(apartmentType);
}
return View();
}
}
マイコントローラー[httpPOST] - すべての値が表示から返される場合と、データベースに挿入するクエリ
[HttpPost]
public ActionResult AddOffer(AddOfferAnnounceModel model)
{
bool isValid = true; // daca datele introduse in formularul anuntului sunt corecte si respecta regulile
if (isValid)
{
string announceDetailsItem = model.AnnounceDetails;
decimal priceItem = model.Price;
int surfaceItem = model.Surface;
int subTypeId = model.SubTypeId; // GETTING FROM DROPDOWNLIST !!!!
int netItem = Convert.ToInt32(model.Net);
DateTime dateItem = DateTime.Now;
string sql = "insert into announces (typeid, statusId, locationId, finalPrice, date, surface, net, announceDetails) values (1, 1, 1, " + priceItem + ",'" + dateItem + "'," + surfaceItem + "," + netItem + ",'" + announceDetailsItem + "')";
sql += " insert into announceOfferApartments (announceId, subTypeId, yPersonTypeId) values ((select max(announceId) from announces), 6, 4)";
using (SqlConnection cn = new SqlConnection(ConnectionString))
{
cn.Open();
SqlCommand cmd = new SqlCommand(sql, cn)
{
CommandType = CommandType.Text
};
cmd.ExecuteScalar();
return RedirectToAction("OfferList", "Announce");
// daca datele au fost introduse in DB, se redirectioneaza catre Lista Anunturilor
}
}
return OfferList();
}
マイビュー:
@model myApp.com.Models.AddOfferAnnounceModel
...
<div class="form-group">
@Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Surface, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Surface, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
....
私が見るには複数のモデルを持つことはできません知っています。私はおそらく、すべてのパラメータを含むCombinedクラスを作成する必要がありますが、私はどのようにDataTableからリストを作成する必要があるのかわからない(キーと値を持つディクショナリ?!)とドロップダウンに値を表示し、コントローラ - > ActionResult AddOffer [httpPost]でパラメータsubTypeIdにキーを転送します。
同じフォームで4つの5つのドロップダウンリストを作成する必要がありますが、おそらく同じ方法になります。
おかげで、そしてあまりにも多くの反対票を受信しないことを望む:D
ありがとう。 AddOfferAnnounceModelクラスのAnnouncementTypesを作成するのを忘れないでください:Dこれは完璧な作業で、AddOffer [httpPost]の値を保存します。 –
幸いです –