コントローラ:
public ActionResult Filter()
{
ViewBag.Accounts = BusinessLayer.AccountManager.Instance.getUserAccounts(HttpContext.User.Identity.Name);
return View();
}
見る:
<td>Account: </td>
<td>@Html.DropDownListFor("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))</td>
ViewBag.Accounts
には、Account
、AccountID
およびその他のプロパティを持つAccountName
オブジェクトが含まれます。 accountidと呼ばれるDropDownList
(フォーム投稿で選択したAccountIDを渡すことができるように)とDropDownList
を使用してAccountName
を表示したいAccountID
を値として持つ。
ビューコードで何が間違っていますか?
ヘルパーを使用できません@Html.DropdownListFor
、最初のパラメーターが正しくなかったため、ヘルパーを次のように変更します。
@Html.DropDownList("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))
@Html.DropDownListFor
最初のパラメーターですべてのオーバーロードのラムダ式を受け取り、厳密に型指定されたドロップダウンを作成するために使用されます。
ビューが何らかのモデルに強く型付けされている場合、ヘルパーを使用してコードを変更し、強く型付けされたドロップダウンリストを作成できます。
@Html.DropDownListFor(x => x.accountId, new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))
試してください:
コントローラー内:
ViewBag.Accounts= new SelectList(db.Accounts, "AccountId", "AccountName");
ビューで:
@Html.DropDownList("AccountId", (IEnumerable<SelectListItem>)ViewBag.Accounts, null, new { @class ="form-control" })
または、「null」をデフォルトのセレクターとして表示するもの、つまり「Select Account」で置き換えることができます。
私は次のことをします
私のアクションメソッドで
Dictionary<string, string> dictAccounts = ViewModelDropDown.GetAccounts(id);
ViewBag.accounts = dictAccounts;
私のビューコードで
Dictionary<string, string> accounts = (Dictionary<string, string>)ViewBag.accounts;
@Html.DropDownListFor(model => model.AccountId, new SelectList(accounts, "Value", "Key"), new { style = "width:310px; height: 30px; padding 5px; margin: 5px 0 6px; background: none repeat scroll 0 0 #FFFFFF; vertical-align:middle;" })
それがうまくいくことを願って
@Html.DropDownList("accountid", (IEnumerable<SelectListItem>)ViewBag.Accounts, String.Empty, new { @class ="extra-class" })
ここに String.Empty
はデフォルトのセレクターとして空になります。
代わりに_@Html.DropDownList
_を使用してみてください。
_<td>Account: </td>
<td>@Html.DropDownList("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))</td>
_
_@Html.DropDownListFor
_は、指定したIDのstring
ではなく、ラムダを最初の引数として期待します。
それ以外は、getUserAccounts()
の構成を知らなくても、少なくとも1つのオブジェクトを含むある種のコレクション(たとえば、IEnumerable
)を返す必要があると言えば十分です。 null
を返す場合、ViewBagのプロパティには何もありません。
表示にリストを送信するためにViewbagを使用するのは間違っています。この場合、Viewmodelを使用する必要があります。このように:
[HttpGet]
public ActionResult NewAgahi() // New Advertising
{
//--------------------------------------------------------
// استفاده از ویومدل برای نمایش چند مدل در ویو
Country_Repository blCountry = new Country_Repository();
Ostan_Repository blOstan = new Ostan_Repository();
City_Repository blCity = new City_Repository();
Mahale_Repository blMahale = new Mahale_Repository();
Agahi_Repository blAgahi = new Agahi_Repository();
var vm = new NewAgahi_ViewModel();
vm.Country = blCountry.Select();
vm.Ostan = blOstan.Select();
vm.City = blCity.Select();
vm.Mahale = blMahale.Select();
//vm.Agahi = blAgahi.Select();
return View(vm);
}
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult NewAgahi(Agahi agahi)
{
if (ModelState.IsValid == true)
{
Agahi_Repository blAgahi = new Agahi_Repository();
agahi.Date = DateTime.Now.Date;
agahi.UserId = 1048;
agahi.GroupId = 1;
if (blAgahi.Add(agahi) == true)
{
//Success
return JavaScript("alert('ثبت شد')");
}
else
{
//Fail
return JavaScript("alert('اشکال در ثبت')");
}
using ProjectName.Models.DomainModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ProjectName.ViewModels
{
public class NewAgahi_ViewModel // برای استفاده کردن از چند مدل در یک ویو
{
public IEnumerable<Country> Country { get; set; }
public IEnumerable<Ostan> Ostan { get; set; }
public IEnumerable<City> City { get; set; }
public IQueryable<Mahale> Mahale { get; set; }
public ProjectName.Models.DomainModels.Agahi Agahi { get; set; }
}
}
@model ProjectName.ViewModels.NewAgahi_ViewModel
..... .....
@Html.DropDownList("CountryList", new SelectList(Model.Country, "id", "Name"))
@Html.DropDownList("CityList", new SelectList(Model.City, "id", "Name"))
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ProjectName.Models.DomainModels;
namespace ProjectName.Models.Repositories
{
public class Country_Repository : IDisposable
{
private MyWebSiteDBEntities db = null;
public Country_Repository()
{
db = new DomainModels.MyWebSiteDBEntities();
}
public Boolean Add(Country entity, bool autoSave = true)
{
try
{
db.Country.Add(entity);
if (autoSave)
return Convert.ToBoolean(db.SaveChanges());
//return "True";
else
return false;
}
catch (Exception e)
{
string ss = e.Message;
//return e.Message;
return false;
}
}
public bool Update(Country entity, bool autoSave = true)
{
try
{
db.Country.Attach(entity);
db.Entry(entity).State = System.Data.Entity.EntityState.Modified;
if (autoSave)
return Convert.ToBoolean(db.SaveChanges());
else
return false;
}
catch (Exception e)
{
string ss = e.Message; // کد بلااستفاده فقط برای ازمایش اکسپشن این را نوشتم
return false;
}
}
public bool Delete(Country entity, bool autoSave = true)
{
try
{
db.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
if (autoSave)
return Convert.ToBoolean(db.SaveChanges());
else
return false;
}
catch
{
return false;
}
}
public bool Delete(int id, bool autoSave = true)
{
try
{
var entity = db.Country.Find(id);
db.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
if (autoSave)
return Convert.ToBoolean(db.SaveChanges());
else
return false;
}
catch
{
return false;
}
}
public Country Find(int id)
{
try
{
return db.Country.Find(id);
}
catch
{
return null;
}
}
public IQueryable<Country> Where(System.Linq.Expressions.Expression<Func<Country, bool>> predicate)
{
try
{
return db.Country.Where(predicate);
}
catch
{
return null;
}
}
public IQueryable<Country> Select()
{
try
{
return db.Country.AsQueryable();
}
catch
{
return null;
}
}
public IQueryable<TResult> Select<TResult>(System.Linq.Expressions.Expression<Func<Country, TResult>> selector)
{
try
{
return db.Country.Select(selector);
}
catch
{
return null;
}
}
public int GetLastIdentity()
{
try
{
if (db.Country.Any())
return db.Country.OrderByDescending(p => p.id).First().id;
else
return 0;
}
catch
{
return -1;
}
}
public int Save()
{
try
{
return db.SaveChanges();
}
catch
{
return -1;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (this.db != null)
{
this.db.Dispose();
this.db = null;
}
}
}
~Country_Repository()
{
Dispose(false);
}
}
}