Vuejs
будет использовать instanceof для проверки типа.
Таким образом, вы можете просто добавить File
, если вам требуется оба типа:
export default {
name: 'BaseFile',
props: {
label: { type: String },
value: { type: [Object, File] },
placeholder: { type: String, default: "Choose a file..." },
acceptedExtensions: { type: String, default: "image/jpeg, image/png" }
},
}
Также я бы посоветовал инициализировать profileImage
с помощью undefined
или null
IIUC, который вы не используете. .
Моя цель с отключением ViewState в этом выпадающем списке состоит в том, чтобы минимизировать размер ViewState для страницы.
Проблема я имел только с выполнением если (! Страница. IsPostBack) {... DataBind ()...}, то, что при выборе объекта впервые и перезагрузок страницы мой выпадающий список становится пустым.
То, что я закончил тем, что делал, создавало другое Свойство на этом управлении, LastIndex. Когда событие OnSelectedIndexChanged стреляет, я обновляю значение LastIndex. В Page_Load я сравниваю Текущие и Последние индексные значения, если они отличаются, затем стреляют, Индекс изменил событие.
public int SelectedValue{
get { return this.DropDownList1.SelectedItem.Value; }
}
public int LastIndex{
get { return this.ViewState["lastIndex"] == null ? -1 : (int)this.ViewState["lastIndex"]; }
set { this.ViewState["lastIndex"] = value; }
}
protected override void OnInit(EventArgs e){
base.OnInit(e);
this.DropDownList1.DataTextField = "Text";
this.DropDownList1.DataValueField = "Value";
this.DropDownList1.DataSource = fillQueueDropDown();
this.DropDownList1.DataBind();
}
protected void Page_Load(object sender, EventArgs e){
if (this.LastIndex != this.SelectedValue)
this.OnSelectedQueueChanged(new EventArgs());
}
private ListItemCollection fillQueueDropDown(){...}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e){
OnSelectedQueueChanged(e);
this.LastIndex = this.SelectedValue;
}
public event EventHandler queueNamesChangedEvent;
public void OnSelectedQueueChanged(EventArgs e){
if (queueNamesChangedEvent != null)
queueNamesChangedEvent(this, e);
}
Вы правы все же. Данные перезагружаются и повышение фазы OnInit. Затем ViewState восстанавливается (и когда индекс 0th восстанавливается), когда мы наконец добираемся до фазы Событий, управление не обнаруживает изменение.
Не уверенный это - самый изящный маршрут, но он работает хороший до сих пор.
Затем я нашел это в документах MSDN для IPostBackDataHandler:
public virtual bool LoadPostData(string postDataKey,
NameValueCollection postCollection) {
String presentValue = Text;
String postedValue = postCollection[postDataKey];
if (presentValue == null || !presentValue.Equals(postedValue)) {
Text = postedValue;
return true;
}
return false;
}
Так как приведенная стоимость совпадает с измененным - для оценки, событие не запущено.
Проблема состоит в том, что Вы загружаете данные каждый раз, когда и это сбрасывает выбранный индекс. Предположите, что это - Ваше выпадающее:
zero [selected]
one
two
Затем в клиенте Вы изменяете выбранный индекс:
zero
one [selected]
two
Это заполняет скрытый вход __EVENTARGUMENT
с Вашим новым индексом (1) и скрытым входом __EVENTTARGET
с id
из Вашего выпадающего. Теперь серверный код вталкивает и перезагружает Ваши данные:
zero [selected]
one
two
"нуль" является выбранным значением, потому что это - значение по умолчанию, когда данные загружаются. Затем ASP.NET ищет __EVENTTARGET
и __EVENTARGUMENT
в Request
и находит Ваш dropdown's id
и находит новый индекс (1). Теперь Ваше выпадающее похоже на это:
zero
one [selected]
two
Так как индекс изменился, выпадающие повышения SelectedIndexChanged
событие, указывающее, что индекс изменился. Очевидно, это - часть, которая работает, теперь позволяет, видят, почему выбор первого объекта в списке не генерирует событие.
Теперь позволяет, говорят, что у нас все еще есть выпадающее в состоянии, это было только в (при этом "один" был выбран и выбранный индекс 1). Что происходит, когда мы выбираем первый объект в списке на клиенте?
__EVENTTARGET
и __EVENTARGUMENT
заполняются с id
из выпадающего и нового индекса (0). Затем сервер загружает данные в выпадающее, и выпадающее теперь похоже на это снова:
zero [selected]
one
two
Заметьте, что, так как Вы перезагрузили данные, прежде чем события стреляли, индекс уже установлен на 0, потому что это - значение по умолчанию. Теперь то, когда Ваши огни события и выбранный индекс dropdown установлены на 0, выпадающее не рассматривает это как изменение начиная с выбранного индекса (насколько это знает), не изменилось.
Вот то, как решить проблему:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!Page.IsPostBack)
{
this.DropDownList1.DataTextField = "Text";
this.DropDownList1.DataValueField = "Value";
this.DropDownList1.DataSource = fillQueueDropDown();
this.DropDownList1.DataBind();
}
}
То, что это сделает, только загрузить данные в выпадающее, если страница не является обратной передачей. Это означает, что ViewState поддержит данные для Вас, а также выбранного индекса так, чтобы то, когда Вы отправляете назад выпадающее, сравнило новый индекс с индексом, который Вы видели в клиенте.